PERFORCE change 139541 for review
Paolo Pisati
piso at FreeBSD.org
Mon Apr 7 20:06:54 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=139541
Change 139541 by piso at piso_newluxor on 2008/04/07 20:06:31
-don't pass to Libalias pkts coming from layer2
-reassemble packet before passing it to libalias (much like ip_divert
does)
-refresh ip ptr after passing it down in LibAliasLockedIn()
-some more debug around
This make libalias work with mbuf, modules are not ready.
Affected files ...
.. //depot/projects/soc2005/libalias/sys/netinet/ip_fw_nat.c#7 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#75 edit
Differences ...
==== //depot/projects/soc2005/libalias/sys/netinet/ip_fw_nat.c#7 (text+ko) ====
@@ -250,9 +250,8 @@
int ldt, retval;
/* ipfw_nat works only at layer 3 */
- if (args->eh != NULL) {
- // XXX get out
- }
+ if (args->eh != NULL)
+ goto badnat;
ldt = 0;
retval = 0;
@@ -260,11 +259,13 @@
NULL)
goto badnat;
ip = mtod(m, struct ip *);
+ printf("%s()::%d - ip->ip_off: %d\n", __FUNCTION__, __LINE__, ip->ip_off);
if (ip->ip_off & (IP_MF | IP_OFFMASK)) {
- struct mbuf *reass = NULL;
+ struct mbuf *reass;
+ printf("fragment found\n");
/* Reassemble packet. */
- //reass = ip_reass(m);
+ reass = ip_reass(m);
/*
* IP header checksum fixup after reassembly and leave header
@@ -284,7 +285,7 @@
ip->ip_sum = in_cksum(reass, hlen);
m = reass;
} else {
- printf("fragment found\n");
+ printf("can't reass\n");
m = NULL;
goto badnat;
}
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#75 (text+ko) ====
@@ -1282,7 +1282,7 @@
iresult = PKT_ALIAS_IGNORED;
if ((ntohs(pip->ip_off) & IP_OFFMASK) == 0) {
- printf("%d\n", __LINE__);
+ printf("%s()::%d - ip->ip_off: %d\n", __FUNCTION__, __LINE__, pip->ip_off);
switch (pip->ip_p) {
case IPPROTO_ICMP:
printf("%d\n", __LINE__);
@@ -1324,9 +1324,11 @@
break;
}
+ PULLUP_IPHDR(pip, ptr);
if (ntohs(pip->ip_off) & IP_MF) {
struct alias_link *lnk;
+ printf("%s()::%d - ip->ip_off: %d\n", __FUNCTION__, __LINE__, pip->ip_off);
lnk = FindFragmentIn1(la, pip->ip_src, alias_addr, pip->ip_id);
if (lnk != NULL) {
iresult = PKT_ALIAS_FOUND_HEADER_FRAGMENT;
@@ -1336,7 +1338,7 @@
}
}
} else {
- printf("%d\n", __LINE__);
+ printf("%s()::%d - ip->ip_off: %d\n", __FUNCTION__, __LINE__, pip->ip_off);
iresult = FragmentIn(la, pip->ip_src, &pip->ip_dst, pip->ip_id,
&pip->ip_sum);
}
More information about the p4-projects
mailing list