mirror of https://gitee.com/openkylin/linux.git
openvswitch: Store flow key len if ARP opcode is not request or reply.
We currently only extract the ARP payload if the opcode indicates that it is a request or reply. However, we also only set the key length in these situations even though it should still be possible to match on the opcode. There's no real reason to restrict the ARP opcode since all have the same format so this simply removes the check. Signed-off-by: Mehak Mahajan <mmahajan@nicira.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
parent
c1c92b6a5b
commit
d04d382980
|
@ -702,15 +702,11 @@ int ovs_flow_extract(struct sk_buff *skb, u16 in_port, struct sw_flow_key *key,
|
|||
/* 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);
|
||||
}
|
||||
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 */
|
||||
|
|
Loading…
Reference in New Issue