static int __bridge_table_dump(struct vr_message_dumper *dumper) { struct vr_route_req *req = (struct vr_route_req *)(dumper->dump_req); struct vr_route_req resp; int ret; unsigned int i; struct vr_bridge_entry *be; for(i = 0; i < (vr_bridge_entries + vr_bridge_oentries); i++) { be = (struct vr_bridge_entry *) vr_get_hentry_by_index(vn_rtable, i); if (!be) continue; if (be->be_flags & VR_BE_FLAG_VALID) { if (be->be_key.be_vrf_id != req->rtr_req.rtr_vrf_id) continue; if (dumper->dump_been_to_marker == 0) { if (VR_MAC_CMP(be->be_key.be_mac, req->rtr_req.rtr_mac) && (be->be_key.be_vrf_id == req->rtr_req.rtr_vrf_id)) { dumper->dump_been_to_marker = 1; } } else { if (!bridge_entry_make_req(&resp, be)) { ret = vr_message_dump_object(dumper, VR_ROUTE_OBJECT_ID, &resp); bridge_entry_req_destroy(&resp); if (ret <= 0) { return ret; } } } } } return 0; }
static inline bool vr_my_pkt(unsigned char *pkt_mac, struct vr_interface *vif) { /* * Packet is destined to us if: * 1) IF destination MAC is our Mac * 2) If VIF is service interface */ if (VR_MAC_CMP(pkt_mac, vif->vif_mac) || vif_is_service(vif)) return true; return false; }