Create another entry point into ip_input() so MT_TAGs will work.
authorJeffrey Hsu <hsu@dragonflybsd.org>
Tue, 13 Apr 2004 00:14:01 +0000 (00:14 +0000)
committerJeffrey Hsu <hsu@dragonflybsd.org>
Tue, 13 Apr 2004 00:14:01 +0000 (00:14 +0000)
sys/net/dummynet/ip_dummynet.c
sys/netinet/in_var.h
sys/netinet/ip_divert.c
sys/netinet/ip_input.c
sys/netinet/ip_output.c

index d4d03f6..2c748fa 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/netinet/ip_dummynet.c,v 1.24.2.22 2003/05/13 09:31:06 maxim Exp $
- * $DragonFly: src/sys/net/dummynet/ip_dummynet.c,v 1.6 2004/03/06 01:58:55 hsu Exp $
+ * $DragonFly: src/sys/net/dummynet/ip_dummynet.c,v 1.7 2004/04/13 00:14:00 hsu Exp $
  */
 
 #if !defined(KLD_MODULE)
@@ -80,7 +80,6 @@
 #include <netinet/in_var.h>
 #include <netinet/ip.h>
 #include <net/ipfw/ip_fw.h>
-#include <net/netisr.h>
 #include "ip_dummynet.h"
 #include <netinet/ip_var.h>
 
@@ -433,13 +432,8 @@ transmit_event(struct dn_pipe *pipe)
            break ;
 
        case DN_TO_IP_IN :
-           {
-           struct netmsg_packet msg;
-
-           msg.nm_packet = (struct mbuf *)&pkt;
-           ip_input((struct netmsg *)&msg) ;
+           ip_input((struct mbuf *)pkt) ;
            break ;
-           }
 
        case DN_TO_BDG_FWD :
            if (!BDG_LOADED) {
index e46fae6..9287fa5 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)in_var.h    8.2 (Berkeley) 1/9/95
  * $FreeBSD: src/sys/netinet/in_var.h,v 1.33.2.3 2001/12/14 20:09:34 jlemon Exp $
- * $DragonFly: src/sys/netinet/in_var.h,v 1.6 2004/03/06 01:58:55 hsu Exp $
+ * $DragonFly: src/sys/netinet/in_var.h,v 1.7 2004/04/13 00:14:01 hsu Exp $
  */
 
 #ifndef _NETINET_IN_VAR_H_
@@ -230,7 +230,7 @@ void        in_delmulti (struct in_multi *);
 int    in_control (struct socket *, u_long, caddr_t, struct ifnet *,
                        struct thread *);
 void   in_rtqdrain (void);
-void   ip_input (struct netmsg *);
+void   ip_input (struct mbuf *);
 int    in_ifadown (struct ifaddr *ifa, int);
 void   in_ifscrub (struct ifnet *, struct in_ifaddr *);
 int    ipflow_fastforward (struct mbuf *);
index 1d1a93d..4cd2c93 100644 (file)
@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/netinet/ip_divert.c,v 1.42.2.6 2003/01/23 21:06:45 sam Exp $
- * $DragonFly: src/sys/netinet/ip_divert.c,v 1.11 2004/03/31 00:43:09 hsu Exp $
+ * $DragonFly: src/sys/netinet/ip_divert.c,v 1.12 2004/04/13 00:14:01 hsu Exp $
  */
 
 #include "opt_inet.h"
@@ -57,7 +57,6 @@
 #include <vm/vm_zone.h>
 
 #include <net/if.h>
-#include <net/netisr.h>
 #include <net/route.h>
 
 #include <netinet/in.h>
@@ -307,8 +306,6 @@ div_output(struct socket *so, struct mbuf *m,
                            IP_ALLOWBROADCAST | IP_RAWOUTPUT,
                            inp->inp_moptions, NULL);
        } else {
-               struct netmsg_packet msg;
-
                if (m->m_pkthdr.rcvif == NULL) {
                        /*
                         * No luck with the name, check by IP address.
@@ -326,9 +323,7 @@ div_output(struct socket *so, struct mbuf *m,
                        }
                        m->m_pkthdr.rcvif = ifa->ifa_ifp;
                }
-               /* Send packet to input processing */
-               msg.nm_packet = (struct mbuf *)&divert_tag;
-               ip_input((struct netmsg *)&msg);
+               ip_input((struct mbuf *)&divert_tag);
        }
 
        return error;
index 3ab1f12..5ce02db 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)ip_input.c  8.2 (Berkeley) 1/4/94
  * $FreeBSD: src/sys/netinet/ip_input.c,v 1.130.2.52 2003/03/07 07:01:28 silby Exp $
- * $DragonFly: src/sys/netinet/ip_input.c,v 1.17 2004/04/09 22:34:10 hsu Exp $
+ * $DragonFly: src/sys/netinet/ip_input.c,v 1.18 2004/04/13 00:14:01 hsu Exp $
  */
 
 #define        _IP_VHL
@@ -242,14 +242,15 @@ static    struct ip_srcrt {
        struct  in_addr route[MAX_IPOPTLEN/sizeof(struct in_addr)];
 } ip_srcrt;
 
-static void    save_rte(u_char *, struct in_addr);
-static int     ip_dooptions(struct mbuf *m, int,
-                       struct sockaddr_in *next_hop);
-static void    ip_forward(struct mbuf *m, int srcrt,
-                       struct sockaddr_in *next_hop);
-static void    ip_freef(struct ipq *);
-static struct  mbuf *ip_reass(struct mbuf *, struct ipq *,
-               struct ipq *, u_int32_t *, u_int16_t *);
+static void            save_rte (u_char *, struct in_addr);
+static int             ip_dooptions (struct mbuf *m, int,
+                                       struct sockaddr_in *next_hop);
+static void            ip_forward (struct mbuf *m, int srcrt,
+                                       struct sockaddr_in *next_hop);
+static void            ip_freef (struct ipq *);
+static void            ip_input_handler (struct netmsg *);
+static struct mbuf     *ip_reass (struct mbuf *, struct ipq *,
+                                       struct ipq *, u_int32_t *, u_int16_t *);
 
 /*
  * IP initialization: fill in IP protocol switch table.
@@ -293,7 +294,7 @@ ip_init()
 #endif
        ipintrq.ifq_maxlen = ipqmaxlen;
 
-       netisr_register(NETISR_IP, ip_mport, ip_input);
+       netisr_register(NETISR_IP, ip_mport, ip_input_handler);
 }
 
 /*
@@ -351,14 +352,22 @@ transport_processing_handler(struct netmsg *msg0)
        lwkt_replymsg(&msg0->nm_lmsg, 0);
 }
 
+static void
+ip_input_handler(struct netmsg *msg0)
+{
+       struct mbuf *m = ((struct netmsg_packet *)msg0)->nm_packet;
+
+       ip_input(m);
+       lwkt_replymsg(&msg0->nm_lmsg, 0);
+}
+
 /*
  * Ip input routine.  Checksum and byte swap header.  If fragmented
  * try to reassemble.  Process options.  Pass to next level.
  */
 void
-ip_input(struct netmsg *msg0)
+ip_input(struct mbuf *m)
 {
-       struct mbuf *m = ((struct netmsg_packet *)msg0)->nm_packet;
        struct ip *ip;
        struct ipq *fp;
        struct in_ifaddr *ia = NULL;
@@ -1005,12 +1014,10 @@ DPRINTF(("ip_input: no SP, packet discarded\n"));/*XXX*/
        } else {
                transport_processing_oncpu(m, hlen, ip, args.next_hop);
        }
-       lwkt_replymsg(&msg0->nm_lmsg, 0);
        return;
 
 bad:
        m_freem(m);
-       lwkt_replymsg(&msg0->nm_lmsg, 0);
 }
 
 /*
index 9b0d3e0..7a1bc19 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)ip_output.c 8.3 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/netinet/ip_output.c,v 1.99.2.37 2003/04/15 06:44:45 silby Exp $
- * $DragonFly: src/sys/netinet/ip_output.c,v 1.11 2004/03/06 01:58:55 hsu Exp $
+ * $DragonFly: src/sys/netinet/ip_output.c,v 1.12 2004/04/13 00:14:01 hsu Exp $
  */
 
 #define _IP_VHL
@@ -894,7 +894,6 @@ spd_done:
                        }
                        if (ia) {       /* tell ip_input "dont filter" */
                                struct m_hdr tag;
-                               struct netmsg_packet msg;
 
                                tag.mh_type = MT_TAG;
                                tag.mh_flags = PACKET_TAG_IPFORWARD;
@@ -912,8 +911,7 @@ spd_done:
                                    CSUM_IP_CHECKED | CSUM_IP_VALID;
                                ip->ip_len = htons(ip->ip_len);
                                ip->ip_off = htons(ip->ip_off);
-                               msg.nm_packet = (struct mbuf *)&tag;
-                               ip_input((struct netmsg *)&msg);
+                               ip_input((struct mbuf *)&tag);
                                goto done;
                        }
                        /* Some of the logic for this was