int vr_l3_input(struct vr_packet *pkt, struct vr_forwarding_md *fmd) { struct vr_interface *vif = pkt->vp_if; if (pkt->vp_type == VP_TYPE_IP) { vr_ip_input(vif->vif_router, pkt, fmd); return 1; } else if (pkt->vp_type == VP_TYPE_IP6) { vr_ip6_input(vif->vif_router, pkt, fmd); return 1; } return 0; }
static int vr_flow_forward(unsigned short vrf, struct vr_packet *pkt, unsigned short proto, struct vr_forwarding_md *fmd) { struct vr_interface *vif = pkt->vp_if; struct vrouter *router = vif->vif_router; if (proto != VR_ETH_PROTO_IP) { vr_pfree(pkt, VP_DROP_FLOW_INVALID_PROTOCOL); return 0; } if (pkt->vp_nh) return nh_output(vrf, pkt, pkt->vp_nh, fmd); pkt_set_data(pkt, pkt->vp_network_h); return vr_ip_input(router, vrf, pkt, fmd); }