On Tue, Apr 30, 2013 at 05:31:39PM -0400, Nitin Sharma wrote:
> I am trying to parse an ARP src and dst ip from arp broadcast, and I could
> achieve it on OFv1.0 using the wiki article (pkt.protocols). However on v1.2 ,
> how would i achieve the same?

Using match field of packet-in isn't portable regarding to OF switch
implementations because packet header fields may not be included.
Actually Open vSwitch only includes metadata(in_port, tun_id, registers),
not packet header fields.

>From the spec, Please notice "Optionally":
   Optionally, the OXM TLVs may also include packet header fields that
   were previously extracted from the packet, including any
   modifications of those in the course of the processing.

So the portable way is for controller to parse packets itself, don't rely
on match fields.
It would be convenient to use match field to extract header fields, I think.
I guess some vendors were against including header fields. So it resulted
in "Optionally".

thanks,

> Following this - I could get the in_port using the below -
> 
> if (msg.version == 3):
>             for f in msg.match.fields:
>                 if f.header == ofproto_v1_2.OXM_OF_IN_PORT:
>                     in_port = f.value
>                 if f.header == ofproto_v1_2.OXM_OF_ETH_SRC:
>                     unsrc_mac = f.value
>                 if f.header == ofproto_v1_2.OXM_OF_ETH_DST:
>                     undst_mac = f.value
>         elif (msg.version == 1):
>             in_port = msg.in_port
> 
> what should i do for the following to work? any specifics im missing.
> 
> if ((_eth_type == 2054) & (dst_mac == 'ff:ff:ff:ff:ff:ff')):
>             self.logger.info("parse arp broadcast")
>             if (msg.version == 3):
>                 for g in msg.match.fields:
>                     if g.header == ofproto_v1_2.OXM_OF_ARP_SPA:
>                         dst_ip = g.value
>                         print dst_ip
>                     if g.header == ofproto_v1_2.OXM_OF_ARP_TPA:
>                         src_ip = g.value
>                         print src_ip
>             elif (msg.version == 1):
>                 pkt = packet.Packet(array.array('B', ev.msg.data))
>                 for p in pkt.protocols:
>                     if p.protocol_name == 'arp':
>                         dst_ip = str(self.numToDottedQuad(p.dst_ip))
>                         src_ip = str(self.numToDottedQuad(p.src_ip))
> 
> Thanks for your help.
>  Nitin

> ------------------------------------------------------------------------------
> Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
> Get 100% visibility into your production application - at no cost.
> Code-level diagnostics for performance bottlenecks with <2% overhead
> Download for free and get started troubleshooting in minutes.
> http://p.sf.net/sfu/appdyn_d2d_ap1
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel


-- 
yamahata

------------------------------------------------------------------------------
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with <2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to