PERFORCE change 114230 for review
Paolo Pisati
piso at FreeBSD.org
Thu Feb 8 08:49:52 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=114230
Change 114230 by piso at piso_newluxor on 2007/02/08 08:49:42
o redefine mtod() -> MYMTOD() and correctly check for NULL value after an m_pullup()
o add a new PULLUP macro (PULLUP_SIZE()) to m_pullup() an arbitrary num of bytes
Affected files ...
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#23 edit
Differences ...
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#23 (text+ko) ====
@@ -179,27 +179,29 @@
#ifdef _KERNEL
typedef struct mbuf ** pkt_t;
+#define MYMTOD(p, foo) (p != NULL) ? mtod(p, foo) : NULL
+
#define PULLUP_IPHDR(pip, ptr) do { \
*ptr = m_pullup((*ptr), sizeof(struct ip)); \
- (pip) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} 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) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} 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) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} 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) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} while (0)
#define PULLUP_ICMPIP64(pip, ptr, ic) do { \
@@ -208,26 +210,32 @@
s = (pip->ip_hl << 2) + sizeof(struct icmp) + \
(ic->icmp_ip.ip_hl << 2) - sizeof(struct ip) + 8; \
*ptr = m_pullup((*ptr), s); \
- (pip) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} while (0)
#define PULLUP_IPTCPHDR(pip, ptr) do { \
*ptr = m_pullup((*ptr), sizeof(struct ip)); \
- (pip) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
if (pip != NULL) { \
*ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct tcphdr)); \
- (pip) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} \
} while (0)
#define PULLUP_IPUDPHDR(pip, ptr) do { \
*ptr = m_pullup((*ptr), sizeof(struct ip)); \
- (pip) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
if (pip != NULL) { \
*ptr = m_pullup((*ptr), (pip->ip_hl << 2) + sizeof(struct udphdr)); \
- (pip) = mtod(*ptr, struct ip *); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
} \
} while (0)
+
+#define PULLUP_SIZE(pip, ptr, s) do { \
+ *ptr = m_pullup((*ptr), s); \
+ (pip) = MYMTOD(*ptr, struct ip *); \
+} while (0)
+
#else
typedef char * pkt_t;
@@ -238,6 +246,7 @@
#define PULLUP_ICMPIP64(pip, ptr, ic) pip = (struct ip *)ptr
#define PULLUP_IPTCPHDR(pip, ptr) pip = (struct ip *)ptr
#define PULLUP_IPUDPHDR(pip, ptr) pip = (struct ip *)ptr
+#define PULLUP_SIZE(pip, ptr, s) pip = (struct ip *)ptr
#endif
/*
More information about the p4-projects
mailing list