X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=dummynet%2Fip_dummynet.c;h=836d1e178d4b75d02a8fc1d3c77731858a034fba;hb=1f3693d89c1c88e895721e21751c354e74b99627;hp=b8cbc2ef1fb09faf24ff117bcabdd5bd601591ce;hpb=5f337135c613b2ee3cb24ade7617ecaae0a74681;p=ipfw.git diff --git a/dummynet/ip_dummynet.c b/dummynet/ip_dummynet.c index b8cbc2e..836d1e1 100644 --- a/dummynet/ip_dummynet.c +++ b/dummynet/ip_dummynet.c @@ -1540,7 +1540,7 @@ dropit: pkt = dn_tag_get(m); pkt->dn_dir = DN_TO_DROP; } - dummynet_send(m); /* drop the packet */ + dummynet_send(m); /* drop the packet */ *m0 = NULL; return ((fs && (fs->flags_fs & DN_NOERROR)) ? 0 : ENOBUFS); } @@ -1549,9 +1549,15 @@ dropit: * Below, the rt_unref is only needed when (pkt->dn_dir == DN_TO_IP_OUT) * Doing this would probably save us the initial bzero of dn_pkt */ -#define DN_FREE_PKT(_m) do { \ +#if defined( __linux__ ) +#define DN_FREE_PKT(_m) do { \ + netisr_dispatch(-1, _m); \ +} while (0) +#else +#define DN_FREE_PKT(_m) do { \ m_freem(_m); \ } while (0) +#endif /* * Dispose all packets and flow_queues on a flow_set. @@ -2272,7 +2278,7 @@ ip_dn_ctl(struct sockopt *sopt) switch (sopt->sopt_name) { default : printf("dummynet: -- unknown option %d", sopt->sopt_name); - error = EINVAL ; + error = EINVAL ; break ; case IP_DUMMYNET_GET :