PERFORCE change 113681 for review
Paolo Pisati
piso at FreeBSD.org
Tue Jan 30 00:36:39 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=113681
Change 113681 by piso at piso_newluxor on 2007/01/30 00:36:22
Bring tcp src port from an upper layer: this way we don't need anymore
to ip_next() in ProxyEncodeIpHeader().
Affected files ...
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#36 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#13 edit
.. //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_proxy.c#15 edit
Differences ...
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias.c#36 (text+ko) ====
@@ -965,7 +965,7 @@
TcpAliasOut(struct libalias *la, struct ip *pip, int maxpacketsize, int create)
{
int proxy_type, error;
- u_short dest_port;
+ u_short dest_port, src_port;
u_short proxy_server_port;
struct in_addr dest_address;
struct in_addr proxy_server_address;
@@ -975,7 +975,8 @@
LIBALIAS_LOCK_ASSERT(la);
tc = (struct tcphdr *)ip_next(pip);
dest_port = tc->th_dport;
-
+ src_port = tc->th_sport;
+
if (create)
proxy_type = ProxyCheck(la, pip, &proxy_server_address,
&proxy_server_port, dest_port);
@@ -1028,7 +1029,8 @@
if (proxy_type != 0) {
SetProxyPort(lnk, dest_port);
SetProxyAddress(lnk, dest_address);
- ProxyModify(la, lnk, pip, maxpacketsize, proxy_type);
+ ProxyModify(la, lnk, pip, maxpacketsize, proxy_type,
+ src_port);
tc = (struct tcphdr *)ip_next(pip);
}
/* Get alias address and port */
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_local.h#13 (text+ko) ====
@@ -324,7 +324,7 @@
u_short * _proxy_server_port, u_short dst_port);
void
ProxyModify(struct libalias *la, struct alias_link *_lnk, struct ip *_pip,
- int _maxpacketsize, int _proxy_type);
+ int _maxpacketsize, int _proxy_type, u_short src_port);
enum alias_tcp_state {
ALIAS_TCP_STATE_NOT_CONNECTED,
==== //depot/projects/soc2005/libalias/sys/netinet/libalias/alias_proxy.c#15 (text+ko) ====
@@ -147,7 +147,7 @@
static void RuleDelete(struct proxy_entry *);
static int RuleNumberDelete(struct libalias *la, int);
static void ProxyEncodeTcpStream(struct alias_link *, struct ip *, int);
-static void ProxyEncodeIpHeader(struct ip *);
+static void ProxyEncodeIpHeader(struct ip *, u_short sport);
#ifdef _KERNEL
static int
@@ -480,7 +480,7 @@
}
static void
-ProxyEncodeIpHeader(struct ip *pip)
+ProxyEncodeIpHeader(struct ip *pip, u_short sport)
{
#define OPTION_LEN_BYTES 8
#define OPTION_LEN_INT16 4
@@ -499,7 +499,6 @@
/* Build option and copy into packet */
{
u_char *ptr;
- struct tcphdr *tc;
ptr = (u_char *) pip;
ptr += 20;
@@ -510,8 +509,7 @@
memcpy(&option[2], (u_char *) & pip->ip_dst, 4);
- tc = (struct tcphdr *)ip_next(pip);
- memcpy(&option[6], (u_char *) & tc->th_sport, 2);
+ memcpy(&option[6], (u_char *) & sport, 2);
memcpy(ptr, option, 8);
}
@@ -599,10 +597,8 @@
}
void
-ProxyModify(struct libalias *la, struct alias_link *lnk,
- struct ip *pip,
- int maxpacketsize,
- int proxy_type)
+ProxyModify(struct libalias *la, struct alias_link *lnk, struct ip *pip,
+ int maxpacketsize, int proxy_type, u_short src_port)
{
LIBALIAS_LOCK_ASSERT(la);
@@ -610,7 +606,7 @@
switch (proxy_type) {
case PROXY_TYPE_ENCODE_IPHDR:
- ProxyEncodeIpHeader(pip);
+ ProxyEncodeIpHeader(pip, src_port);
break;
case PROXY_TYPE_ENCODE_TCPSTREAM:
More information about the p4-projects
mailing list