diff options
author | mlaier <mlaier@FreeBSD.org> | 2004-02-18 00:04:52 +0000 |
---|---|---|
committer | mlaier <mlaier@FreeBSD.org> | 2004-02-18 00:04:52 +0000 |
commit | 60723c32606f318dd3816d81ba433654f812312b (patch) | |
tree | 8161989612a5d1dd2b4c63580a9c95cb85146c14 /sys/net | |
parent | 9a383d1448d0eecb2082f01c9fa00232399e77a0 (diff) | |
download | FreeBSD-src-60723c32606f318dd3816d81ba433654f812312b.zip FreeBSD-src-60723c32606f318dd3816d81ba433654f812312b.tar.gz |
Backout MT_TAG removal (i.e. bring back MT_TAGs) for now, as dummynet is
not working properly with the patch in place.
Approved by: bms(mentor)
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/bridge.c | 14 | ||||
-rw-r--r-- | sys/net/if_ethersubr.c | 17 |
2 files changed, 24 insertions, 7 deletions
diff --git a/sys/net/bridge.c b/sys/net/bridge.c index 9ca1dd8..a444f1c 100644 --- a/sys/net/bridge.c +++ b/sys/net/bridge.c @@ -920,11 +920,14 @@ bdg_forward(struct mbuf *m0, struct ifnet *dst) DDB(quad_t ticks; ticks = rdtsc();) - /* did we match a firewall rule ? */ - args.rule = ip_dn_find_rule(m0); - if (args.rule) - shared = 0; /* For sure this is our own mbuf. */ - else + args.rule = NULL; /* did we match a firewall rule ? */ + /* Fetch state from dummynet tag, ignore others */ + for (;m0->m_type == MT_TAG; m0 = m0->m_next) + if (m0->_m_tag_id == PACKET_TAG_DUMMYNET) { + args.rule = ((struct dn_pkt *)m0)->rule; + shared = 0; /* For sure this is our own mbuf. */ + } + if (args.rule == NULL) bdg_thru++; /* count 1st time through bdg_forward */ /* @@ -1043,6 +1046,7 @@ bdg_forward(struct mbuf *m0, struct ifnet *dst) args.m = m0; /* the packet we are looking at */ args.oif = NULL; /* this is an input packet */ + args.divert_rule = 0; /* we do not support divert yet */ args.next_hop = NULL; /* we do not support forward yet */ args.eh = &save_eh; /* MAC header for bridged/MAC packets */ i = ip_fw_chk_ptr(&args); diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index 835f5dc..567b0b7 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -322,7 +322,12 @@ bad: if (m != NULL) int ether_output_frame(struct ifnet *ifp, struct mbuf *m) { - struct ip_fw *rule = ip_dn_find_rule(m); + struct ip_fw *rule = NULL; + + /* Extract info from dummynet tag, ignore others */ + for (; m->m_type == MT_TAG; m = m->m_next) + if (m->m_flags == PACKET_TAG_DUMMYNET) + rule = ((struct dn_pkt *)m)->rule; if (rule == NULL && BDG_ACTIVE(ifp)) { /* @@ -392,6 +397,7 @@ ether_ipfw_chk(struct mbuf **m0, struct ifnet *dst, args.m = m; /* the packet we are looking at */ args.oif = dst; /* destination, if any */ + args.divert_rule = 0; /* we do not support divert yet */ args.rule = *rule; /* matching rule to restart */ args.next_hop = NULL; /* we do not support forward yet */ args.eh = &save_eh; /* MAC header for bridged/MAC packets */ @@ -605,7 +611,14 @@ ether_demux(struct ifnet *ifp, struct mbuf *m) #if defined(NETATALK) struct llc *l; #endif - struct ip_fw *rule = ip_dn_find_rule(m); + struct ip_fw *rule = NULL; + + /* Extract info from dummynet tag, ignore others */ + for (;m->m_type == MT_TAG; m = m->m_next) + if (m->m_flags == PACKET_TAG_DUMMYNET) { + rule = ((struct dn_pkt *)m)->rule; + ifp = m->m_next->m_pkthdr.rcvif; + } KASSERT(ifp != NULL, ("ether_demux: NULL interface pointer")); |