[email protected]
[Top] [All Lists]

PERFORCE change 114002 for review

Subject: PERFORCE change 114002 for review
From: Paolo Pisati
Date: Sun, 4 Feb 2007 16:38:56 GMT
http://perforce.freebsd.org/chv.cgi?CH=114002

Change 114002 by [email protected]_newluxor on 2007/02/04 16:37:59

        Teach mbuf to Prox odeTcpStream().

Affected files ...

.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#54 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#19 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_proxy.c#19 edit

Differences ...

==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#54 
(text+ko) ====

@@ -1054,10 +1054,11 @@
                if (proxy_type != 0) {
                        SetProxyPort(lnk, dest_port);
                        SetProxyAddress(lnk, dest_address);
-                       // XXX broken
                        ProxyModify(la, lnk, ptr, maxpacketsize, proxy_type, 
                            src_port);
-                       // XXX m_pullup()
+                       PULLUP_IPTCPHDR(pip, ptr);
+                       if (pip == NULL)
+                               return (PKT_ALIAS_IGNORED);
                        tc = (struct tcphdr *)ip_next(pip);
                }
 /* Get alias address and port */

==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#19 
(text+ko) ====

@@ -215,12 +215,21 @@
        (pip) = mtod(m, struct ip *);           \
 } while (0)
 
+#define PULLUP_IPTCPHDR(pip, ptr) do {          \
+        struct mbuf *m;                         \
+       m = m_pullup((ptr), sizeof(struct ip)); \
+        (pip) = mtod(m, struct ip *);           \
+        m = m_pullup((ptr), (pip->ip_hl << 2) + sizeof(struct tcphdr)); \
+       (pip) = mtod(m, struct ip *);           \
+} while (0)
+
 #else
 #define PULLUP_IPHDR(pip, ptr) pip = (struct ip *)ptr
 #define PULLUP_UDPHDR(pip, ptr) pip = ptr
 #define PULLUP_TCPHDR(pip, ptr) pip = ptr
 #define PULLUP_ICMPHDR(pip, ptr) pip = (struct ip *)ptr
 #define PULLUP_ICMPIP64(pip, ptr, ic) pip = ptr
+#define PULLUP_IPTCPHDR(pip, ptr) pip = (struct ip *)ptr
 #endif
 
 /*

==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_proxy.c#19 
(text+ko) ====

@@ -146,7 +146,7 @@
 static void    RuleAdd(struct libalias *la, struct proxy_entry *);
 static void    RuleDelete(struct proxy_entry *);
 static int     RuleNumberDelete(struct libalias *la, int);
-static void    Prox odeTcpStream(struct alias_link *, struct ip *, int);
+static void    Prox odeTcpStream(struct alias_link *, void *, int);
 static void    Prox odeIpHeader(void *, u_short sport);
 
 #ifdef _KERNEL
@@ -392,13 +392,17 @@
 
 static void
 Prox odeTcpStream(struct alias_link *lnk,
-    struct ip *pip,
+    void *ptr,
     int maxpacketsize)
 {
        int slen;
        char buffer[40];
+       struct ip *pip;
        struct tcphdr *tc;
 
+       PULLUP_TCPHDR(pip, ptr);
+       if (pip == NULL)
+               return;
 /* Compute pointer to tcp header */
        tc = (struct tcphdr *)ip_next(pip);
 
@@ -431,7 +435,11 @@
        {
                int dlen;
                int hlen;
+#ifdef _KERNEL
+               struct mbuf *m;
+#else
                u_char *p;
+#endif
 
                hlen = (pip->ip_hl + tc->th_off) << 2;
                dlen = ntohs(pip->ip_len) - hlen;
@@ -440,14 +448,25 @@
 
                if (dlen == 0)
                        return;
-
+#ifdef _KERNEL
+               m = m_split(ptr, hlen, M_TRYWAIT);
+               if (m == NULL)
+                       return;
+               m_copyback(ptr, hlen, slen, buffer);
+               m_cat(ptr, m);
+#else
                p = (char *)pip;
                p += hlen;
 
                bcopy(p, p + slen, dlen);
                memcpy(p, buffer, slen);
+#endif
        }
 
+       PULLUP_IPTCPHDR(pip, ptr);
+       if (pip == NULL)
+               return;
+
 /* Save information about modfied sequence number */
        {
                int delta;
@@ -626,7 +645,6 @@
 ProxyModify(struct libalias *la, struct alias_link *lnk, void *ptr,
     int maxpacketsize, int proxy_type, u_short src_port)
 {
-       struct ip *pip;
 
        LIBALIAS_LOCK_ASSERT(la);
        (void)la;
@@ -637,8 +655,7 @@
                break;
 
        case PROXY_TYPE_ENCODE_TCPSTREAM:
-               PULLUP_IPHDR(pip, ptr);
-               Prox odeTcpStream(lnk, pip, maxpacketsize);
+               Prox odeTcpStream(lnk, ptr, maxpacketsize);
                break;
        }
 }
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/p4-projects
To unsubscribe, send any mail to "[email protected]"

<Prev in Thread] Current Thread [Next in Thread>
  • PERFORCE change 114002 for review, Paolo Pisati <=