Hi All,

I am aware there had been some discussion on running lldpad and open-fcoe utils (like fcoemon) on top of ovs, but couldn’t figure out a way to successfully run lldpad and fcoemon on top of openvswitch.

I did some experimentation with openvswitch and open-fcoe and now I am trying to get opinion from you guys about what would be the best approach to make fcoeuilts run on top of openvswitch. I used openvswitch v2.3.2 for my testing. My experimentation was carried out using XenServer and in my experimentation I could see FIP and LLDP don’t reach lldpad and fcoemon daemons.

Bit of background what these daemon are. You can skip this paragraph, if you know about these daemons. FCoE’s lossless ethernet can be achieved using dcb (dcbx protocol). dcb, in open-fcoe, is enabled using lldpad (LLDP agent daemon) which handles dbcx options and much more. dcb needs to be enabled and available on a interface for fcoemon to start fcoe operations.

I have figured out why lldpad and fcoemon don’t receive ETH_P_LLDP and ETH_P_FIP packets.
lldpad and fcoemon open ETH_P_LLDP and ETH_P_FIP raw sockets respectively.
Since the processing of raw socket packets (ptype_base) happens after openvswitch (rx_handler), when running in XenServer any raw socket listening on ethX interface, will not receive any packets, as openvswitch always return RX_HANDLER_CONSUMED. rx_handlers are only set for ethX and xenbrX (bridge interface) doesn’t have any rx_handler set. Ideally, if raw socket is listening on xenbrX interface it should receive the packets. But in case of lldpad it is not possible to make this daemon receive packet on xenbrX interface.

lldpad daemon opens PF_LLDP raw socket and it listens on all ports. If you consider XenServer, then it listens on xenbrX (bridge interface) and ethX interface. llpdad also queries for the dcb state, from the netdevice, using dcbnl_ops. As of now xenbrX (bridge interface) doesn’t have any dcbnl_ops, which mean lldpad will only be able to configure, listen, send, receive lldp pdu on ethX interfaces. Without dcb support on xenbrX interface, fcoemon will not start fcoe handling on xenbrX interface. This rules out having these daemons run on top of xenbrX (bridge interface).

So I am looking for an interface, similar to linux bridge, where setting an action of drop doesn’t drop the packet instead it returns RX_HANDLER_PASS and ptype_base handler (including packet_handler) can pickup the packet.

I did a proof of concept, by having a hack, in netdev_frame_hook() datapath/vport-netdev.c if (skb->protocol == cpu_to_be16(ETH_P_FIP) || skb->protocol == cpu_to_be16(0x88CC))
return RX_HANDLER_PASS;
and this makes fcoemon and lldpad daemon work as expected.

If returning RX_HANDLER_PASS is the right approach to go forward, how do we design this into ovs. Can we have an action called “ignore" which will ignore certain flows from being processed by openvswitch. Is there any other approach that I can take.

Thanks,
Anoob.

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to