Date: Thu, 8 Feb 2007 10:59:34 GMT From: Paolo Pisati <piso@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 114233 for review Message-ID: <200702081059.l18AxY9Y070560@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=114233 Change 114233 by piso@piso_newluxor on 2007/02/08 10:58:34 o when pulling up an ip hdr, if present, pullup the options too. o rewrite some PULLUP macros, using PULLUP_SIZE. Affected files ... .. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#24 edit Differences ... ==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#24 (text+ko) ==== @@ -181,59 +181,50 @@ #define MYMTOD(p, foo) (p != NULL) ? mtod(p, foo) : NULL +#define PULLUP_SIZE(pip, ptr, s) do { \ + *ptr = m_pullup((*ptr), s); \ + (pip) = MYMTOD(*ptr, struct ip *); \ +} while (0) + #define PULLUP_IPHDR(pip, ptr) do { \ - *ptr = m_pullup((*ptr), sizeof(struct ip)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ + PULLUP_SIZE(pip, ptr, sizeof(struct ip)); \ + if (pip != NULL && ((pip->ip_hl << 2) > sizeof(struct ip))) \ + PULLUP_SIZE(pip, ptr, (pip->ip_hl << 2)); \ } while (0) #define PULLUP_UDPHDR(pip, ptr) do { \ - pip = mtod(*ptr, struct ip *); \ - *ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct udphdr)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ + pip = mtod(*ptr, struct ip *); \ + PULLUP_SIZE(pip, ptr, (pip->ip_hl << 2) + sizeof(struct udphdr)); \ } while (0) #define PULLUP_TCPHDR(pip, ptr) do { \ - pip = mtod(*ptr, struct ip *); \ - *ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct tcphdr)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ + pip = mtod(*ptr, struct ip *); \ + PULLUP_SIZE(pip, ptr, (pip->ip_hl << 2) + sizeof(struct tcphdr)); \ } while (0) #define PULLUP_ICMPHDR(pip, ptr) do { \ - pip = mtod(*ptr, struct ip *); \ - *ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct icmp)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ + pip = mtod(*ptr, struct ip *); \ + PULLUP_SIZE(pip, ptr, (pip->ip_hl << 2) + sizeof(struct icmp)); \ } while (0) #define PULLUP_ICMPIP64(pip, ptr, ic) do { \ int s; \ - pip = mtod(*ptr, struct ip *); \ - s = (pip->ip_hl << 2) + sizeof(struct icmp) + \ - (ic->icmp_ip.ip_hl << 2) - sizeof(struct ip) + 8; \ - *ptr = m_pullup((*ptr), s); \ - (pip) = MYMTOD(*ptr, struct ip *); \ + pip = mtod(*ptr, struct ip *); \ + s = (pip->ip_hl << 2) + sizeof(struct icmp) + \ + (ic->icmp_ip.ip_hl << 2) - sizeof(struct ip) + 8; \ + PULLUP_SIZE(pip, ptr, s); \ } while (0) #define PULLUP_IPTCPHDR(pip, ptr) do { \ - *ptr = m_pullup((*ptr), sizeof(struct ip)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ - if (pip != NULL) { \ - *ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct tcphdr)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ - } \ + PULLUP_IPHDR(pip, ptr); \ + if (pip != NULL) \ + PULLUP_TCPHDR(pip, ptr); \ } while (0) #define PULLUP_IPUDPHDR(pip, ptr) do { \ - *ptr = m_pullup((*ptr), sizeof(struct ip)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ - if (pip != NULL) { \ - *ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct udphdr)); \ - (pip) = MYMTOD(*ptr, struct ip *); \ - } \ -} while (0) - -#define PULLUP_SIZE(pip, ptr, s) do { \ - *ptr = m_pullup((*ptr), s); \ - (pip) = MYMTOD(*ptr, struct ip *); \ + PULLUP_IPHDR(pip, ptr); \ + if (pip != NULL) \ + PULLUP_UDPHDR(pip, ptr); \ } while (0) #else
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200702081059.l18AxY9Y070560>