Exemplo n.º 1
0
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)
}