With this commit, the datapath will process the ARP header for RARP packets, both request and reply.
Signed-off-by: Mehak Mahajan <[email protected]> --- datapath/flow.c | 23 +++++++++++------------ lib/flow.c | 11 ++++------- 2 files changed, 15 insertions(+), 19 deletions(-) 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); } } else if (key->eth.type == htons(ETH_P_IPV6)) { int nh_len; /* IPv6 Header + Extensions */ diff --git a/lib/flow.c b/lib/flow.c index 0c9aa36..06478da 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -435,13 +435,10 @@ flow_extract(struct ofpbuf *packet, uint32_t skb_priority, flow->nw_proto = ntohs(arp->ar_op); } - if ((flow->nw_proto == ARP_OP_REQUEST) - || (flow->nw_proto == ARP_OP_REPLY)) { - flow->nw_src = arp->ar_spa; - flow->nw_dst = arp->ar_tpa; - memcpy(flow->arp_sha, arp->ar_sha, ETH_ADDR_LEN); - memcpy(flow->arp_tha, arp->ar_tha, ETH_ADDR_LEN); - } + flow->nw_src = arp->ar_spa; + flow->nw_dst = arp->ar_tpa; + memcpy(flow->arp_sha, arp->ar_sha, ETH_ADDR_LEN); + memcpy(flow->arp_tha, arp->ar_tha, ETH_ADDR_LEN); } } } -- 1.7.2.5 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
