summaryrefslogtreecommitdiffstats
path: root/sys/netinet/libalias
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/libalias')
-rw-r--r--sys/netinet/libalias/alias.c44
-rw-r--r--sys/netinet/libalias/alias_cuseeme.c9
-rw-r--r--sys/netinet/libalias/alias_db.c6
-rw-r--r--sys/netinet/libalias/alias_ftp.c4
-rw-r--r--sys/netinet/libalias/alias_irc.c2
-rw-r--r--sys/netinet/libalias/alias_local.h26
-rw-r--r--sys/netinet/libalias/alias_nbt.c8
-rw-r--r--sys/netinet/libalias/alias_pptp.c12
-rw-r--r--sys/netinet/libalias/alias_proxy.c6
-rw-r--r--sys/netinet/libalias/alias_skinny.c4
-rw-r--r--sys/netinet/libalias/alias_smedia.c6
-rw-r--r--sys/netinet/libalias/alias_util.c2
12 files changed, 77 insertions, 52 deletions
diff --git a/sys/netinet/libalias/alias.c b/sys/netinet/libalias/alias.c
index 6acf03b..a2c2911 100644
--- a/sys/netinet/libalias/alias.c
+++ b/sys/netinet/libalias/alias.c
@@ -173,7 +173,7 @@ TcpMonitorIn(struct ip *pip, struct alias_link *lnk)
{
struct tcphdr *tc;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
switch (GetStateIn(lnk)) {
case ALIAS_TCP_STATE_NOT_CONNECTED:
@@ -194,7 +194,7 @@ TcpMonitorOut(struct ip *pip, struct alias_link *lnk)
{
struct tcphdr *tc;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
switch (GetStateOut(lnk)) {
case ALIAS_TCP_STATE_NOT_CONNECTED:
@@ -283,7 +283,7 @@ IcmpAliasIn1(struct libalias *la, struct ip *pip)
struct alias_link *lnk;
struct icmp *ic;
- ic = (struct icmp *)((char *)pip + (pip->ip_hl << 2));
+ ic = (struct icmp *)ip_next(pip);
/* Get source address from ICMP data field and restore original data */
lnk = FindIcmpIn(la, pip->ip_src, pip->ip_dst, ic->icmp_id, 1);
@@ -329,12 +329,12 @@ IcmpAliasIn2(struct libalias *la, struct ip *pip)
struct tcphdr *tc;
struct alias_link *lnk;
- ic = (struct icmp *)((char *)pip + (pip->ip_hl << 2));
+ ic = (struct icmp *)ip_next(pip);
ip = &ic->icmp_ip;
- ud = (struct udphdr *)((char *)ip + (ip->ip_hl << 2));
- tc = (struct tcphdr *)ud;
- ic2 = (struct icmp *)ud;
+ ud = (struct udphdr *)ip_next(ip);
+ tc = (struct tcphdr *)ip_next(ip);
+ ic2 = (struct icmp *)ip_next(ip);
if (ip->ip_p == IPPROTO_UDP)
lnk = FindUdpTcpIn(la, ip->ip_dst, ip->ip_src,
@@ -426,7 +426,7 @@ IcmpAliasIn(struct libalias *la, struct ip *pip)
if (la->packetAliasMode & PKT_ALIAS_PROXY_ONLY)
return (PKT_ALIAS_OK);
- ic = (struct icmp *)((char *)pip + (pip->ip_hl << 2));
+ ic = (struct icmp *)ip_next(pip);
iresult = PKT_ALIAS_IGNORED;
switch (ic->icmp_type) {
@@ -461,7 +461,7 @@ IcmpAliasOut1(struct libalias *la, struct ip *pip)
struct alias_link *lnk;
struct icmp *ic;
- ic = (struct icmp *)((char *)pip + (pip->ip_hl << 2));
+ ic = (struct icmp *)ip_next(pip);
/* Save overwritten data for when echo packet returns */
lnk = FindIcmpOut(la, pip->ip_src, pip->ip_dst, ic->icmp_id, 1);
@@ -508,12 +508,12 @@ IcmpAliasOut2(struct libalias *la, struct ip *pip)
struct tcphdr *tc;
struct alias_link *lnk;
- ic = (struct icmp *)((char *)pip + (pip->ip_hl << 2));
+ ic = (struct icmp *)ip_next(pip);
ip = &ic->icmp_ip;
- ud = (struct udphdr *)((char *)ip + (ip->ip_hl << 2));
- tc = (struct tcphdr *)ud;
- ic2 = (struct icmp *)ud;
+ ud = (struct udphdr *)ip_next(ip);
+ tc = (struct tcphdr *)ip_next(ip);
+ ic2 = (struct icmp *)ip_next(ip);
if (ip->ip_p == IPPROTO_UDP)
lnk = FindUdpTcpOut(la, ip->ip_dst, ip->ip_src,
@@ -607,7 +607,7 @@ IcmpAliasOut(struct libalias *la, struct ip *pip, int create)
if (la->packetAliasMode & PKT_ALIAS_PROXY_ONLY)
return (PKT_ALIAS_OK);
- ic = (struct icmp *)((char *)pip + (pip->ip_hl << 2));
+ ic = (struct icmp *)ip_next(pip);
iresult = PKT_ALIAS_IGNORED;
switch (ic->icmp_type) {
@@ -707,7 +707,7 @@ UdpAliasIn(struct libalias *la, struct ip *pip)
if (la->packetAliasMode & PKT_ALIAS_PROXY_ONLY)
return (PKT_ALIAS_OK);
- ud = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
+ ud = (struct udphdr *)ip_next(pip);
lnk = FindUdpTcpIn(la, pip->ip_src, pip->ip_dst,
ud->uh_sport, ud->uh_dport,
@@ -771,7 +771,7 @@ UdpAliasOut(struct libalias *la, struct ip *pip, int create)
if (la->packetAliasMode & PKT_ALIAS_PROXY_ONLY)
return (PKT_ALIAS_OK);
- ud = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
+ ud = (struct udphdr *)ip_next(pip);
lnk = FindUdpTcpOut(la, pip->ip_src, pip->ip_dst,
ud->uh_sport, ud->uh_dport,
@@ -835,7 +835,7 @@ TcpAliasIn(struct libalias *la, struct ip *pip)
struct tcphdr *tc;
struct alias_link *lnk;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
lnk = FindUdpTcpIn(la, pip->ip_src, pip->ip_dst,
tc->th_sport, tc->th_dport,
@@ -926,7 +926,7 @@ TcpAliasOut(struct libalias *la, struct ip *pip, int maxpacketsize, int create)
struct tcphdr *tc;
struct alias_link *lnk;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
proxy_type = ProxyCheck(la, pip, &proxy_server_address, &proxy_server_port);
@@ -969,7 +969,7 @@ TcpAliasOut(struct libalias *la, struct ip *pip, int maxpacketsize, int create)
SetProxyPort(lnk, dest_port);
SetProxyAddress(lnk, dest_address);
ProxyModify(la, lnk, pip, maxpacketsize, proxy_type);
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
}
/* Get alias address and port */
alias_port = GetAliasPort(lnk);
@@ -1346,9 +1346,9 @@ LibAliasUnaliasOut(struct libalias *la, char *ptr, /* valid IP packet */
|| (pip->ip_hl << 2) > maxpacketsize)
return (iresult);
- ud = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
- tc = (struct tcphdr *)ud;
- ic = (struct icmp *)ud;
+ ud = (struct udphdr *)ip_next(pip);
+ tc = (struct tcphdr *)ip_next(pip);
+ ic = (struct icmp *)ip_next(pip);
/* Find a link */
if (pip->ip_p == IPPROTO_UDP)
diff --git a/sys/netinet/libalias/alias_cuseeme.c b/sys/netinet/libalias/alias_cuseeme.c
index bca6b3b..cbacc55 100644
--- a/sys/netinet/libalias/alias_cuseeme.c
+++ b/sys/netinet/libalias/alias_cuseeme.c
@@ -70,14 +70,13 @@ struct client_info {
void
AliasHandleCUSeeMeOut(struct libalias *la, struct ip *pip, struct alias_link *lnk)
{
- struct udphdr *ud;
+ struct udphdr *ud = ip_next(pip);
- ud = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
if (ntohs(ud->uh_ulen) - sizeof(struct udphdr) >= sizeof(struct cu_header)) {
struct cu_header *cu;
struct alias_link *cu_lnk;
- cu = (struct cu_header *)(ud + 1);
+ cu = udp_next(ud);
if (cu->addr)
cu->addr = (u_int32_t) GetAliasAddress(lnk).s_addr;
@@ -104,8 +103,8 @@ AliasHandleCUSeeMeIn(struct libalias *la, struct ip *pip, struct in_addr origina
(void)la;
alias_addr.s_addr = pip->ip_dst.s_addr;
- ud = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
- cu = (struct cu_header *)(ud + 1);
+ ud = ip_next(pip);
+ cu = udp_next(ud);
oc = (struct oc_header *)(cu + 1);
ci = (struct client_info *)(oc + 1);
end = (char *)ud + ntohs(ud->uh_ulen);
diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c
index e411066..f9c953b 100644
--- a/sys/netinet/libalias/alias_db.c
+++ b/sys/netinet/libalias/alias_db.c
@@ -1908,7 +1908,7 @@ packet size was altered is searched.
int delta, ack_diff_min;
u_long ack;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = ip_next(pip);
ack = tc->th_ack;
delta = 0;
@@ -1952,7 +1952,7 @@ packet size was altered is searched.
int delta, seq_diff_min;
u_long seq;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = ip_next(pip);
seq = tc->th_seq;
delta = 0;
@@ -1996,7 +1996,7 @@ been altered, then this list will begin to overwrite itself.
int hlen, tlen, dlen;
int i;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
diff --git a/sys/netinet/libalias/alias_ftp.c b/sys/netinet/libalias/alias_ftp.c
index 79938db..b628528 100644
--- a/sys/netinet/libalias/alias_ftp.c
+++ b/sys/netinet/libalias/alias_ftp.c
@@ -114,7 +114,7 @@ AliasHandleFtpOut(
int ftp_message_type;
/* Calculate data length of TCP packet */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
@@ -578,7 +578,7 @@ NewFtpMessage(struct libalias *la, struct ip *pip,
#endif
/* Calculate data length of TCP packet */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
diff --git a/sys/netinet/libalias/alias_irc.c b/sys/netinet/libalias/alias_irc.c
index 06abab0..66106fa 100644
--- a/sys/netinet/libalias/alias_irc.c
+++ b/sys/netinet/libalias/alias_irc.c
@@ -80,7 +80,7 @@ AliasHandleIrcOut(struct libalias *la,
int i; /* Iterator through the source */
/* Calculate data length of TCP packet */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
diff --git a/sys/netinet/libalias/alias_local.h b/sys/netinet/libalias/alias_local.h
index bf923a2..67947da 100644
--- a/sys/netinet/libalias/alias_local.h
+++ b/sys/netinet/libalias/alias_local.h
@@ -324,6 +324,32 @@ enum alias_tcp_state {
ALIAS_TCP_STATE_DISCONNECTED
};
+#if defined(_NETINET_IP_H_)
+static __inline void *
+ip_next(struct ip *iphdr)
+{
+ char *p = (char *)iphdr;
+ return (&p[iphdr->ip_hl * 4]);
+}
+#endif
+
+#if defined(_NETINET_TCP_H_)
+static __inline void *
+tcp_next(struct tcphdr *tcphdr)
+{
+ char *p = (char *)tcphdr;
+ return (&p[tcphdr->th_off * 4]);
+}
+#endif
+
+#if defined(_NETINET_UDP_H_)
+static __inline void *
+udp_next(struct udphdr *udphdr)
+{
+ return ((void *)(udphdr + 1));
+}
+#endif
+
/*lint -restore */
#endif /* !_ALIAS_LOCAL_H_ */
diff --git a/sys/netinet/libalias/alias_nbt.c b/sys/netinet/libalias/alias_nbt.c
index 151bc9d..b51abd1 100644
--- a/sys/netinet/libalias/alias_nbt.c
+++ b/sys/netinet/libalias/alias_nbt.c
@@ -218,10 +218,10 @@ AliasHandleUdpNbt(
(void)lnk;
/* Calculate data length of UDP packet */
- uh = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
+ uh = (struct udphdr *)ip_next(pip);
pmax = (char *)uh + ntohs(uh->uh_ulen);
- ndh = (NbtDataHeader *) ((char *)uh + (sizeof(struct udphdr)));
+ ndh = (NbtDataHeader *)udp_next(uh);
if ((char *)(ndh + 1) > pmax)
return (-1);
#ifdef DEBUG
@@ -654,9 +654,9 @@ AliasHandleUdpNbtNS(
nbtarg.newport = *original_port;
/* Calculate data length of UDP packet */
- uh = (struct udphdr *)((char *)pip + (pip->ip_hl << 2));
+ uh = (struct udphdr *)ip_next(pip);
nbtarg.uh_sum = &(uh->uh_sum);
- nsh = (NbtNSHeader *) ((char *)uh + (sizeof(struct udphdr)));
+ nsh = (NbtNSHeader *)udp_next(uh);
p = (u_char *) (nsh + 1);
pmax = (char *)uh + ntohs(uh->uh_ulen);
diff --git a/sys/netinet/libalias/alias_pptp.c b/sys/netinet/libalias/alias_pptp.c
index 499b5fe..174780f 100644
--- a/sys/netinet/libalias/alias_pptp.c
+++ b/sys/netinet/libalias/alias_pptp.c
@@ -193,7 +193,7 @@ AliasHandlePptpOut(struct libalias *la,
cptr->cid1 = GetAliasPort(pptp_lnk);
/* Compute TCP checksum for revised packet */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
accumulate -= cptr->cid1;
ADJUST_CHECKSUM(accumulate, tc->th_sum);
@@ -265,7 +265,7 @@ AliasHandlePptpIn(struct libalias *la,
*pcall_id = GetOriginalPort(pptp_lnk);
/* Compute TCP checksum for modified packet */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
accumulate -= *pcall_id;
ADJUST_CHECKSUM(accumulate, tc->th_sum);
@@ -290,7 +290,7 @@ AliasVerifyPptp(struct ip *pip, u_int16_t * ptype)
struct tcphdr *tc;
/* Calculate some lengths */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
@@ -300,7 +300,7 @@ AliasVerifyPptp(struct ip *pip, u_int16_t * ptype)
return (NULL);
/* Move up to PPTP message header */
- hptr = (PptpMsgHead) (((char *)pip) + hlen);
+ hptr = (PptpMsgHead) ip_next(pip);
/* Return the control message type */
*ptype = ntohs(hptr->type);
@@ -326,7 +326,7 @@ AliasHandlePptpGreOut(struct libalias *la, struct ip *pip)
GreHdr *gr;
struct alias_link *lnk;
- gr = (GreHdr *) ((char *)pip + (pip->ip_hl << 2));
+ gr = (GreHdr *) ip_next(pip);
/* Check GRE header bits. */
if ((ntohl(*((u_int32_t *) gr)) & PPTP_INIT_MASK) != PPTP_INIT_VALUE)
@@ -351,7 +351,7 @@ AliasHandlePptpGreIn(struct libalias *la, struct ip *pip)
GreHdr *gr;
struct alias_link *lnk;
- gr = (GreHdr *) ((char *)pip + (pip->ip_hl << 2));
+ gr = (GreHdr *) ip_next(pip);
/* Check GRE header bits. */
if ((ntohl(*((u_int32_t *) gr)) & PPTP_INIT_MASK) != PPTP_INIT_VALUE)
diff --git a/sys/netinet/libalias/alias_proxy.c b/sys/netinet/libalias/alias_proxy.c
index 24d8bfee7..e0e1c05 100644
--- a/sys/netinet/libalias/alias_proxy.c
+++ b/sys/netinet/libalias/alias_proxy.c
@@ -283,7 +283,7 @@ ProxyEncodeTcpStream(struct alias_link *lnk,
struct tcphdr *tc;
/* Compute pointer to tcp header */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
/* Don't modify if once already modified */
@@ -392,7 +392,7 @@ ProxyEncodeIpHeader(struct ip *pip,
memcpy(&option[2], (u_char *) & pip->ip_dst, 4);
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
memcpy(&option[6], (u_char *) & tc->th_sport, 2);
memcpy(ptr, option, 8);
@@ -451,7 +451,7 @@ ProxyCheck(struct libalias *la, struct ip *pip,
src_addr = pip->ip_src;
dst_addr = pip->ip_dst;
- dst_port = ((struct tcphdr *)((char *)pip + (pip->ip_hl << 2)))
+ dst_port = ((struct tcphdr *)ip_next(pip))
->th_dport;
ptr = la->proxyList;
diff --git a/sys/netinet/libalias/alias_skinny.c b/sys/netinet/libalias/alias_skinny.c
index 6a64063..fccecc6 100644
--- a/sys/netinet/libalias/alias_skinny.c
+++ b/sys/netinet/libalias/alias_skinny.c
@@ -223,12 +223,12 @@ AliasHandleSkinny(struct libalias *la, struct ip *pip, struct alias_link *lnk)
int orig_len, skinny_hdr_len = sizeof(struct skinny_header);
ConvDirection direction;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
- sd = (struct skinny_header *)((char *)pip + hlen);
+ sd = (struct skinny_header *)ip_next(pip);
/*
* XXX This direction is reserved for future use. I still need to
diff --git a/sys/netinet/libalias/alias_smedia.c b/sys/netinet/libalias/alias_smedia.c
index ef19bea..888937c 100644
--- a/sys/netinet/libalias/alias_smedia.c
+++ b/sys/netinet/libalias/alias_smedia.c
@@ -155,7 +155,7 @@ alias_rtsp_out(struct libalias *la, struct ip *pip,
struct in_addr null_addr;
/* Calculate data length of TCP packet */
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
@@ -359,7 +359,7 @@ alias_pna_out(struct libalias *la, struct ip *pip,
/* Punch hole in firewall */
PunchFWHole(pna_links);
#endif
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
alias_port = GetAliasPort(pna_links);
memcpy(work, &alias_port, 2);
@@ -387,7 +387,7 @@ AliasHandleRtspOut(struct libalias *la, struct ip *pip, struct alias_link *lnk,
(void)maxpacketsize;
- tc = (struct tcphdr *)((char *)pip + (pip->ip_hl << 2));
+ tc = (struct tcphdr *)ip_next(pip);
hlen = (pip->ip_hl + tc->th_off) << 2;
tlen = ntohs(pip->ip_len);
dlen = tlen - hlen;
diff --git a/sys/netinet/libalias/alias_util.c b/sys/netinet/libalias/alias_util.c
index 14df53d..687168e 100644
--- a/sys/netinet/libalias/alias_util.c
+++ b/sys/netinet/libalias/alias_util.c
@@ -102,7 +102,7 @@ TcpChecksum(struct ip *pip)
nhdr = pip->ip_hl << 2;
ntcp = ntohs(pip->ip_len) - nhdr;
- tc = (struct tcphdr *)((char *)pip + nhdr);
+ tc = (struct tcphdr *)ip_next(pip);
ptr = (u_short *) tc;
/* Add up TCP header and data */
OpenPOWER on IntegriCloud