X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=fc2939b97b4741e1c8fe2f6a8e4526600d1841c9;hb=e2ead27a7244d61e7f0f71f733f76118056f8981;hp=10c6fee25e85ae9c28985791d7029b4b8a9b3a63;hpb=c93b1d6a4c7f96c5f75f7ec0972fe62e94d369dc;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 10c6fee2..fc2939b9 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -1758,10 +1758,17 @@ process_flow(struct bridge *br, const flow_t *flow, * an exception to this rule: the host has moved to another * switch. */ int src_idx = mac_learning_lookup(br->ml, flow->dl_src, vlan); - if (src_idx != -1 - && src_idx != in_port->port_idx - && !is_bcast_arp_reply(flow, packet)) { - goto done; + if (src_idx != -1 && src_idx != in_port->port_idx) { + if (packet) { + if (!is_bcast_arp_reply(flow, packet)) { + goto done; + } + } else { + /* No way to know whether it's an ARP reply, because the + * flow entry doesn't include enough information and we + * don't have a packet. Punt. */ + return false; + } } } }