func makePort(portNo uint32, port gopenflow.Port) ofp4.Port { var config uint32 for _, conf := range port.GetConfig() { switch c := conf.(type) { case gopenflow.PortConfigPortDown: if bool(c) { config |= ofp4.OFPPC_PORT_DOWN } case gopenflow.PortConfigNoRecv: if bool(c) { config |= ofp4.OFPPC_NO_RECV } case gopenflow.PortConfigNoFwd: if bool(c) { config |= ofp4.OFPPC_NO_FWD } case gopenflow.PortConfigNoPacketIn: if bool(c) { config |= ofp4.OFPPC_NO_PACKET_IN } } } var state uint32 for _, st := range port.State() { switch s := st.(type) { case gopenflow.PortStateLinkDown: if bool(s) { state |= ofp4.OFPPS_LINK_DOWN } case gopenflow.PortStateBlocked: if bool(s) { state |= ofp4.OFPPS_BLOCKED } case gopenflow.PortStateLive: if bool(s) { state |= ofp4.OFPPS_LIVE } } } eth, err := port.Ethernet() if err != nil { log.Print(err) } return ofp4.MakePort(portNo, port.HwAddr(), []byte(port.Name()), config, state, eth.Curr, eth.Advertised, eth.Supported, eth.Peer, eth.CurrSpeed, eth.MaxSpeed) }