git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
net
/
ipv4
/
ipvs
/
ip_vs_proto_udp.c
diff --git
a/net/ipv4/ipvs/ip_vs_proto_udp.c
b/net/ipv4/ipvs/ip_vs_proto_udp.c
index
89d9175
..
03f0a41
100644
(file)
--- a/
net/ipv4/ipvs/ip_vs_proto_udp.c
+++ b/
net/ipv4/ipvs/ip_vs_proto_udp.c
@@
-29,7
+29,7
@@
udp_conn_in_get(const struct sk_buff *skb, struct ip_vs_protocol *pp,
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
- __
u
16 _ports[2], *pptr;
+ __
be
16 _ports[2], *pptr;
pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
if (pptr == NULL)
pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
if (pptr == NULL)
@@
-54,7
+54,7
@@
udp_conn_out_get(const struct sk_buff *skb, struct ip_vs_protocol *pp,
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
const struct iphdr *iph, unsigned int proto_off, int inverse)
{
struct ip_vs_conn *cp;
- __
u
16 _ports[2], *pptr;
+ __
be
16 _ports[2], *pptr;
pptr = skb_header_pointer(skb, skb->nh.iph->ihl*4,
sizeof(_ports), _ports);
pptr = skb_header_pointer(skb, skb->nh.iph->ihl*4,
sizeof(_ports), _ports);
@@
-89,7
+89,7
@@
udp_conn_schedule(struct sk_buff *skb, struct ip_vs_protocol *pp,
return 0;
}
return 0;
}
- if ((svc = ip_vs_service_get(skb->
nf
mark, skb->nh.iph->protocol,
+ if ((svc = ip_vs_service_get(skb->mark, skb->nh.iph->protocol,
skb->nh.iph->daddr, uh->dest))) {
if (ip_vs_todrop()) {
/*
skb->nh.iph->daddr, uh->dest))) {
if (ip_vs_todrop()) {
/*
@@
-117,15
+117,15
@@
udp_conn_schedule(struct sk_buff *skb, struct ip_vs_protocol *pp,
static inline void
static inline void
-udp_fast_csum_update(struct udphdr *uhdr,
u32 oldip, u
32 newip,
-
u16 oldport, u
16 newport)
+udp_fast_csum_update(struct udphdr *uhdr,
__be32 oldip, __be
32 newip,
+
__be16 oldport, __be
16 newport)
{
uhdr->check =
{
uhdr->check =
-
ip_vs_check_diff(~
oldip, newip,
- ip_vs_check_diff
(oldport ^ 0xFFFF
,
-
newport, uhdr->check
));
+
csum_fold(ip_vs_check_diff4(
oldip, newip,
+ ip_vs_check_diff
2(oldport, newport
,
+
~csum_unfold(uhdr->check))
));
if (!uhdr->check)
if (!uhdr->check)
- uhdr->check =
0xFFFF
;
+ uhdr->check =
CSUM_MANGLED_0
;
}
static int
}
static int
@@
-161,7
+161,7
@@
udp_snat_handler(struct sk_buff **pskb,
/* Only port and addr are changed, do fast csum update */
udp_fast_csum_update(udph, cp->daddr, cp->vaddr,
cp->dport, cp->vport);
/* Only port and addr are changed, do fast csum update */
udp_fast_csum_update(udph, cp->daddr, cp->vaddr,
cp->dport, cp->vport);
- if ((*pskb)->ip_summed == CHECKSUM_
HW
)
+ if ((*pskb)->ip_summed == CHECKSUM_
COMPLETE
)
(*pskb)->ip_summed = CHECKSUM_NONE;
} else {
/* full checksum calculation */
(*pskb)->ip_summed = CHECKSUM_NONE;
} else {
/* full checksum calculation */
@@
-173,7
+173,7
@@
udp_snat_handler(struct sk_buff **pskb,
cp->protocol,
(*pskb)->csum);
if (udph->check == 0)
cp->protocol,
(*pskb)->csum);
if (udph->check == 0)
- udph->check =
0xFFFF
;
+ udph->check =
CSUM_MANGLED_0
;
IP_VS_DBG(11, "O-pkt: %s O-csum=%d (+%zd)\n",
pp->name, udph->check,
(char*)&(udph->check) - (char*)udph);
IP_VS_DBG(11, "O-pkt: %s O-csum=%d (+%zd)\n",
pp->name, udph->check,
(char*)&(udph->check) - (char*)udph);
@@
-216,7
+216,7
@@
udp_dnat_handler(struct sk_buff **pskb,
/* Only port and addr are changed, do fast csum update */
udp_fast_csum_update(udph, cp->vaddr, cp->daddr,
cp->vport, cp->dport);
/* Only port and addr are changed, do fast csum update */
udp_fast_csum_update(udph, cp->vaddr, cp->daddr,
cp->vport, cp->dport);
- if ((*pskb)->ip_summed == CHECKSUM_
HW
)
+ if ((*pskb)->ip_summed == CHECKSUM_
COMPLETE
)
(*pskb)->ip_summed = CHECKSUM_NONE;
} else {
/* full checksum calculation */
(*pskb)->ip_summed = CHECKSUM_NONE;
} else {
/* full checksum calculation */
@@
-228,7
+228,7
@@
udp_dnat_handler(struct sk_buff **pskb,
cp->protocol,
(*pskb)->csum);
if (udph->check == 0)
cp->protocol,
(*pskb)->csum);
if (udph->check == 0)
- udph->check =
0xFFFF
;
+ udph->check =
CSUM_MANGLED_0
;
(*pskb)->ip_summed = CHECKSUM_UNNECESSARY;
}
return 1;
(*pskb)->ip_summed = CHECKSUM_UNNECESSARY;
}
return 1;
@@
-250,7
+250,7
@@
udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)
case CHECKSUM_NONE:
skb->csum = skb_checksum(skb, udphoff,
skb->len - udphoff, 0);
case CHECKSUM_NONE:
skb->csum = skb_checksum(skb, udphoff,
skb->len - udphoff, 0);
- case CHECKSUM_
HW
:
+ case CHECKSUM_
COMPLETE
:
if (csum_tcpudp_magic(skb->nh.iph->saddr,
skb->nh.iph->daddr,
skb->len - udphoff,
if (csum_tcpudp_magic(skb->nh.iph->saddr,
skb->nh.iph->daddr,
skb->len - udphoff,
@@
-262,7
+262,7
@@
udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)
}
break;
default:
}
break;
default:
- /*
CHECKSUM_UNNECESSARY
*/
+ /*
No need to checksum.
*/
break;
}
}
break;
}
}
@@
-282,16
+282,18
@@
udp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp)
static struct list_head udp_apps[UDP_APP_TAB_SIZE];
static DEFINE_SPINLOCK(udp_app_lock);
static struct list_head udp_apps[UDP_APP_TAB_SIZE];
static DEFINE_SPINLOCK(udp_app_lock);
-static inline __u16 udp_app_hashkey(__
u
16 port)
+static inline __u16 udp_app_hashkey(__
be
16 port)
{
{
- return ((port >> UDP_APP_TAB_BITS) ^ port) & UDP_APP_TAB_MASK;
+ return (((__force u16)port >> UDP_APP_TAB_BITS) ^ (__force u16)port)
+ & UDP_APP_TAB_MASK;
}
static int udp_register_app(struct ip_vs_app *inc)
{
struct ip_vs_app *i;
}
static int udp_register_app(struct ip_vs_app *inc)
{
struct ip_vs_app *i;
- __u16 hash, port = inc->port;
+ __u16 hash;
+ __be16 port = inc->port;
int ret = 0;
hash = udp_app_hashkey(port);
int ret = 0;
hash = udp_app_hashkey(port);