PERFORCE change 113964 for review
Paolo Pisati
piso at FreeBSD.org
Sat Feb 3 20:06:59 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=113964
Change 113964 by piso at piso_newluxor on 2007/02/03 20:06:15
Teach mbuf to LibAliasFragmentIn(), LibAliasGetFragment() and
LibAliasSaveFragment().
Affected files ...
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#52 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.h#13 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_db.c#22 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#17 edit
Differences ...
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#52 (text+ko) ====
@@ -1225,16 +1225,24 @@
int
+#ifdef _KERNEL
+LibAliasSaveFragment(struct libalias *la, struct mbuf *ptr)
+#else
LibAliasSaveFragment(struct libalias *la, char *ptr)
+#endif
{
int iresult;
struct alias_link *lnk;
struct ip *pip;
LIBALIAS_LOCK(la);
- pip = (struct ip *)ptr;
+ iresult = PKT_ALIAS_ERROR;
+ PULLUP_IPHDR(pip, ptr);
+ if (pip == NULL) {
+ LIBALIAS_UNLOCK(la);
+ return (iresult);
+ }
lnk = AddFragmentPtrLink(la, pip->ip_src, pip->ip_id);
- iresult = PKT_ALIAS_ERROR;
if (lnk != NULL) {
SetFragmentPtr(lnk, ptr);
iresult = PKT_ALIAS_OK;
@@ -1243,16 +1251,28 @@
return (iresult);
}
-
+#ifdef _KERNEL
+struct mbuf *
+LibAliasGetFragment(struct libalias *la, struct mbuf *ptr)
+#else
char *
LibAliasGetFragment(struct libalias *la, char *ptr)
+#endif
{
struct alias_link *lnk;
+#ifdef _KERNEL
+ struct mbuf *fptr;
+#else
char *fptr;
+#endif
struct ip *pip;
LIBALIAS_LOCK(la);
- pip = (struct ip *)ptr;
+ PULLUP_IPHDR(pip, ptr);
+ if (pip == NULL) {
+ LIBALIAS_UNLOCK(la);
+ return (NULL);
+ }
lnk = FindFragmentPtr(la, pip->ip_src, pip->ip_id);
if (lnk != NULL) {
GetFragmentPtr(lnk, &fptr);
@@ -1265,7 +1285,11 @@
return (fptr);
}
-
+#ifdef _KERNEL
+void
+LibAliasFragmentIn(struct libalias *la, struct mbuf *ptr,
+ struct mbuf *ptr_fragment)
+#else
void
LibAliasFragmentIn(struct libalias *la, char *ptr, /* Points to correctly
* de-aliased header
@@ -1273,15 +1297,23 @@
char *ptr_fragment /* Points to fragment which must be
* de-aliased */
)
+#endif
{
struct ip *pip;
struct ip *fpip;
LIBALIAS_LOCK(la);
+ PULLUP_IPHDR(pip, ptr);
+ if (pip == NULL) {
+ LIBALIAS_UNLOCK(la);
+ return;
+ }
+ PULLUP_IPHDR(fpip, ptr_fragment);
+ if (fpip == NULL) {
+ LIBALIAS_UNLOCK(la);
+ return;
+ }
(void)la;
- pip = (struct ip *)ptr;
- fpip = (struct ip *)ptr_fragment;
-
DifferentialChecksum(&fpip->ip_sum,
&pip->ip_dst, &fpip->ip_dst, 2);
fpip->ip_dst = pip->ip_dst;
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.h#13 (text+ko) ====
@@ -178,9 +178,16 @@
unsigned char _proto);
/* Fragment Handling functions. */
+#ifdef _KERNEL
+void LibAliasFragmentIn(struct libalias *, struct mbuf *_ptr,
+ struct mbuf *_ptr_fragment);
+struct mbuf *LibAliasGetFragment(struct libalias *, struct mbuf *_ptr);
+int LibAliasSaveFragment(struct libalias *, struct mbuf *_ptr);
+#else
void LibAliasFragmentIn(struct libalias *, char *_ptr, char *_ptr_fragment);
char *LibAliasGetFragment(struct libalias *, char *_ptr);
int LibAliasSaveFragment(struct libalias *, char *_ptr);
+#endif
/* Miscellaneous functions. */
int LibAliasCheckNewLink(struct libalias *);
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_db.c#22 (text+ko) ====
@@ -327,7 +327,11 @@
* lookup tables */
union { /* Auxiliary data */
+#ifdef _KERNEL
+ struct mbuf *frag_ptr;
+#else
char *frag_ptr;
+#endif
struct in_addr frag_addr;
struct tcp_dat *tcp;
} data;
@@ -1814,14 +1818,22 @@
void
+#ifdef _KERNEL
+SetFragmentPtr(struct alias_link *lnk, struct mbuf *fptr)
+#else
SetFragmentPtr(struct alias_link *lnk, char *fptr)
+#endif
{
lnk->data.frag_ptr = fptr;
}
void
+#ifdef _KERNEL
+GetFragmentPtr(struct alias_link *lnk, struct mbuf **fptr)
+#else
GetFragmentPtr(struct alias_link *lnk, char **fptr)
+#endif
{
*fptr = lnk->data.frag_ptr;
}
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#17 (text+ko) ====
@@ -274,8 +274,13 @@
u_char _proto, u_char _align);
void GetFragmentAddr(struct alias_link *_lnk, struct in_addr *_src_addr);
void SetFragmentAddr(struct alias_link *_lnk, struct in_addr _src_addr);
+#ifdef _KERNEL
+void GetFragmentPtr(struct alias_link *_lnk, struct mbuf **_fptr);
+void SetFragmentPtr(struct alias_link *_lnk, struct mbuf *fptr);
+#else
void GetFragmentPtr(struct alias_link *_lnk, char **_fptr);
void SetFragmentPtr(struct alias_link *_lnk, char *fptr);
+#endif
void SetStateIn(struct alias_link *_lnk, int _state);
void SetStateOut(struct alias_link *_lnk, int _state);
int GetStateIn (struct alias_link *_lnk);
More information about the p4-projects
mailing list