[ovs-dev] [PATCH] Allow processing of RARP packets.

Jesse Gross jesse at nicira.com
Wed Oct 24 01:37:05 UTC 2012


On Tue, Oct 23, 2012 at 1:39 PM, Mehak Mahajan <mmahajan at nicira.com> wrote:
> With this commit, the datapath will process the ARP header for
> RARP packets, both request and reply.
>
> Signed-off-by: Mehak Mahajan <mmahajan at nicira.com>

Can you mention that this also fixes the bug related to key_len?

> diff --git a/datapath/flow.c b/datapath/flow.c
> index b6efd35..4142027 100644
> --- a/datapath/flow.c
> +++ b/datapath/flow.c
> @@ -735,18 +735,17 @@ int ovs_flow_extract(struct sk_buff *skb, u16 in_port, struct sw_flow_key *key,
>                                 && arp->ar_hln == ETH_ALEN
>                                 && arp->ar_pln == 4) {
>
> -                       /* We only match on the lower 8 bits of the opcode. */
> -                       if (ntohs(arp->ar_op) <= 0xff)
> -                               key->ip.proto = ntohs(arp->ar_op);
> -
> -                       if (key->ip.proto == ARPOP_REQUEST
> -                                       || key->ip.proto == ARPOP_REPLY) {
> -                               memcpy(&key->ipv4.addr.src, arp->ar_sip, sizeof(key->ipv4.addr.src));
> -                               memcpy(&key->ipv4.addr.dst, arp->ar_tip, sizeof(key->ipv4.addr.dst));
> -                               memcpy(key->ipv4.arp.sha, arp->ar_sha, ETH_ALEN);
> -                               memcpy(key->ipv4.arp.tha, arp->ar_tha, ETH_ALEN);
> -                               key_len = SW_FLOW_KEY_OFFSET(ipv4.arp);
> -                       }
> +            /* We only match on the lower 8 bits of the opcode. */
> +            if (ntohs(arp->ar_op) <= 0xff)
> +                key->ip.proto = ntohs(arp->ar_op);
> +
> +            memcpy(&key->ipv4.addr.src, arp->ar_sip,
> +                   sizeof(key->ipv4.addr.src));
> +            memcpy(&key->ipv4.addr.dst, arp->ar_tip,
> +                   sizeof(key->ipv4.addr.dst));
> +            memcpy(key->ipv4.arp.sha, arp->ar_sha, ETH_ALEN);
> +            memcpy(key->ipv4.arp.tha, arp->ar_tha, ETH_ALEN);
> +            key_len = SW_FLOW_KEY_OFFSET(ipv4.arp);
>                 }

As Ben mentioned, the indentation here isn't right because kernel
style uses tabs but this has spaces.



More information about the dev mailing list