From owner-p4-projects@FreeBSD.ORG Thu Feb 15 15:33:37 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CC7B616A407; Thu, 15 Feb 2007 15:33:36 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8CC3416A408 for ; Thu, 15 Feb 2007 15:33:36 +0000 (UTC) (envelope-from piso@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 7CF3213C494 for ; Thu, 15 Feb 2007 15:33:36 +0000 (UTC) (envelope-from piso@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l1FFXa2D087893 for ; Thu, 15 Feb 2007 15:33:36 GMT (envelope-from piso@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l1FFXaaI087890 for perforce@freebsd.org; Thu, 15 Feb 2007 15:33:36 GMT (envelope-from piso@freebsd.org) Date: Thu, 15 Feb 2007 15:33:36 GMT Message-Id: <200702151533.l1FFXaaI087890@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to piso@freebsd.org using -f From: Paolo Pisati To: Perforce Change Reviews Cc: Subject: PERFORCE change 114561 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Feb 2007 15:33:37 -0000 http://perforce.freebsd.org/chv.cgi?CH=114561 Change 114561 by piso@piso_newluxor on 2007/02/15 15:33:28 o Teach mbuf to skinny. o Axe an useless var. Affected files ... .. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_skinny.c#13 edit Differences ... ==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_skinny.c#13 (text+ko) ==== @@ -63,7 +63,7 @@ if (ah->dport == NULL || ah->sport == NULL || ah->lnk == NULL) return (-1); if (la->skinnyPort != 0 && (ntohs(*ah->sport) == la->skinnyPort || - ntohs(*ah->dport) == la->skinnyPort)) + ntohs(*ah->dport) == la->skinnyPort)) return (0); return (-1); } @@ -305,10 +305,13 @@ size_t hlen, tlen, dlen; struct ip *pip; struct tcphdr *tc; - u_int32_t msgId, t, len, lip; + u_int32_t msgId, len, lip; struct skinny_header *sd; size_t orig_len, skinny_hdr_len = sizeof(struct skinny_header); ConvDirection direction; +#ifdef _KERNEL + struct mbuf *m, *tmp_m; +#endif PULLUP_TCPHDR(pip, ptr); if (pip == NULL) @@ -318,8 +321,16 @@ tlen = ntohs(pip->ip_len); dlen = tlen - hlen; - // XXX broken +#ifdef _KERNEL + m = m_split(*ptr, hlen, M_TRYWAIT); + *ptr = m_pullup(*ptr, hlen); + pip = mtod(*ptr, struct ip *); + tc = (struct tcphdr *)ip_next(pip); + m = m_pullup(m, sizeof(struct skinny_header)); + sd = mtod(m, struct skinny_header *); +#else sd = (struct skinny_header *)tcp_next(tc); +#endif /* * XXX This direction is reserved for future use. I still need to @@ -335,7 +346,7 @@ fprintf(stderr, "PacketAlias/Skinny: Invalid port number, not a Skinny packet\n"); #endif - return; + goto getout; } orig_len = dlen; @@ -349,14 +360,23 @@ while (dlen >= skinny_hdr_len) { len = (sd->len); msgId = (sd->msgId); - t = len; - if (t > orig_len || t > dlen) { +#ifdef _KERNEL + /* + * After this pullup, we'll have a contiguos Skinny Packet + * Header + len of data. + */ + m = m_pullup(m, skinny_hdr_len + len); + if (m == NULL) + goto getout; + sd = mtod(m, struct skinny_header *); +#endif + if (len > orig_len || len > dlen) { #ifdef LIBALIAS_DEBUG fprintf(stderr, "PacketAlias/Skinny: Not a skinny packet, invalid length \n"); #endif - return; + goto getout; } switch (msgId) { case REG_MSG: { @@ -367,7 +387,7 @@ fprintf(stderr, "PacketAlias/Skinny: Not a skinny packet, bad registration message\n"); #endif - return; + goto getout; } reg_mesg = (struct RegisterMessage *)&sd->msgId; #ifdef LIBALIAS_DEBUG @@ -385,7 +405,7 @@ fprintf(stderr, "PacketAlias/Skinny: Not a skinny packet, port message\n"); #endif - return; + goto getout; } #ifdef LIBALIAS_DEBUG fprintf(stderr, @@ -403,7 +423,7 @@ fprintf(stderr, "PacketAlias/Skinny: Not a skinny packet, packet,OpnRcvChnAckMsg\n"); #endif - return; + goto getout; } #ifdef LIBALIAS_DEBUG fprintf(stderr, @@ -421,7 +441,7 @@ fprintf(stderr, "PacketAlias/Skinny: Not a skinny packet,StartMediaTx Message\n"); #endif - return; + goto getout; } #ifdef LIBALIAS_DEBUG fprintf(stderr, @@ -436,6 +456,19 @@ } /* Place the pointer at the next message in the packet. */ dlen -= len + (skinny_hdr_len - sizeof(msgId)); +#ifdef _KERNEL + /* Trim from the beginning of mbuf the data we already used */ + tmp_m = m_split(m, skinny_hdr_len + len, M_TRYWAIT); + m_cat(*ptr, m); + m = tmp_m; + sd = mtod(m, struct skinny_header *); +#else sd = (struct skinny_header *)(((char *)&sd->msgId) + len); +#endif } +getout: +#ifdef _KERNEL + m_cat(*ptr, m); +#endif + return; }