Commit d5a0a1e3 authored by Al Viro's avatar Al Viro Committed by David S. Miller

[IPV4]: encapsulation annotations

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4806126d
...@@ -19,10 +19,10 @@ struct ip_tunnel_parm ...@@ -19,10 +19,10 @@ struct ip_tunnel_parm
{ {
char name[IFNAMSIZ]; char name[IFNAMSIZ];
int link; int link;
__u16 i_flags; __be16 i_flags;
__u16 o_flags; __be16 o_flags;
__u32 i_key; __be32 i_key;
__u32 o_key; __be32 o_key;
struct iphdr iph; struct iphdr iph;
}; };
......
...@@ -211,8 +211,8 @@ struct xfrm_user_tmpl { ...@@ -211,8 +211,8 @@ struct xfrm_user_tmpl {
struct xfrm_encap_tmpl { struct xfrm_encap_tmpl {
__u16 encap_type; __u16 encap_type;
__u16 encap_sport; __be16 encap_sport;
__u16 encap_dport; __be16 encap_dport;
xfrm_address_t encap_oa; xfrm_address_t encap_oa;
}; };
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* into IP header for icv calculation. Options are already checked * into IP header for icv calculation. Options are already checked
* for validity, so paranoia is not required. */ * for validity, so paranoia is not required. */
static int ip_clear_mutable_options(struct iphdr *iph, u32 *daddr) static int ip_clear_mutable_options(struct iphdr *iph, __be32 *daddr)
{ {
unsigned char * optptr = (unsigned char*)(iph+1); unsigned char * optptr = (unsigned char*)(iph+1);
int l = iph->ihl*4 - sizeof(struct iphdr); int l = iph->ihl*4 - sizeof(struct iphdr);
...@@ -162,7 +162,7 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb) ...@@ -162,7 +162,7 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
iph->frag_off = 0; iph->frag_off = 0;
iph->check = 0; iph->check = 0;
if (ihl > sizeof(*iph)) { if (ihl > sizeof(*iph)) {
u32 dummy; __be32 dummy;
if (ip_clear_mutable_options(iph, &dummy)) if (ip_clear_mutable_options(iph, &dummy))
goto out; goto out;
} }
......
...@@ -67,7 +67,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) ...@@ -67,7 +67,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
if (x->encap) { if (x->encap) {
struct xfrm_encap_tmpl *encap = x->encap; struct xfrm_encap_tmpl *encap = x->encap;
struct udphdr *uh; struct udphdr *uh;
u32 *udpdata32; __be32 *udpdata32;
uh = (struct udphdr *)esph; uh = (struct udphdr *)esph;
uh->source = encap->encap_sport; uh->source = encap->encap_sport;
...@@ -81,7 +81,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb) ...@@ -81,7 +81,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
esph = (struct ip_esp_hdr *)(uh + 1); esph = (struct ip_esp_hdr *)(uh + 1);
break; break;
case UDP_ENCAP_ESPINUDP_NON_IKE: case UDP_ENCAP_ESPINUDP_NON_IKE:
udpdata32 = (u32 *)(uh + 1); udpdata32 = (__be32 *)(uh + 1);
udpdata32[0] = udpdata32[1] = 0; udpdata32[0] = udpdata32[1] = 0;
esph = (struct ip_esp_hdr *)(udpdata32 + 2); esph = (struct ip_esp_hdr *)(udpdata32 + 2);
break; break;
......
...@@ -144,7 +144,7 @@ static struct net_device *ipgre_fb_tunnel_dev; ...@@ -144,7 +144,7 @@ static struct net_device *ipgre_fb_tunnel_dev;
*/ */
#define HASH_SIZE 16 #define HASH_SIZE 16
#define HASH(addr) ((addr^(addr>>4))&0xF) #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF)
static struct ip_tunnel *tunnels[4][HASH_SIZE]; static struct ip_tunnel *tunnels[4][HASH_SIZE];
...@@ -157,7 +157,7 @@ static DEFINE_RWLOCK(ipgre_lock); ...@@ -157,7 +157,7 @@ static DEFINE_RWLOCK(ipgre_lock);
/* Given src, dst and key, find appropriate for input tunnel. */ /* Given src, dst and key, find appropriate for input tunnel. */
static struct ip_tunnel * ipgre_tunnel_lookup(u32 remote, u32 local, u32 key) static struct ip_tunnel * ipgre_tunnel_lookup(__be32 remote, __be32 local, __be32 key)
{ {
unsigned h0 = HASH(remote); unsigned h0 = HASH(remote);
unsigned h1 = HASH(key); unsigned h1 = HASH(key);
...@@ -194,9 +194,9 @@ static struct ip_tunnel * ipgre_tunnel_lookup(u32 remote, u32 local, u32 key) ...@@ -194,9 +194,9 @@ static struct ip_tunnel * ipgre_tunnel_lookup(u32 remote, u32 local, u32 key)
static struct ip_tunnel **ipgre_bucket(struct ip_tunnel *t) static struct ip_tunnel **ipgre_bucket(struct ip_tunnel *t)
{ {
u32 remote = t->parms.iph.daddr; __be32 remote = t->parms.iph.daddr;
u32 local = t->parms.iph.saddr; __be32 local = t->parms.iph.saddr;
u32 key = t->parms.i_key; __be32 key = t->parms.i_key;
unsigned h = HASH(key); unsigned h = HASH(key);
int prio = 0; int prio = 0;
...@@ -236,9 +236,9 @@ static void ipgre_tunnel_unlink(struct ip_tunnel *t) ...@@ -236,9 +236,9 @@ static void ipgre_tunnel_unlink(struct ip_tunnel *t)
static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int create) static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int create)
{ {
u32 remote = parms->iph.daddr; __be32 remote = parms->iph.daddr;
u32 local = parms->iph.saddr; __be32 local = parms->iph.saddr;
u32 key = parms->i_key; __be32 key = parms->i_key;
struct ip_tunnel *t, **tp, *nt; struct ip_tunnel *t, **tp, *nt;
struct net_device *dev; struct net_device *dev;
unsigned h = HASH(key); unsigned h = HASH(key);
...@@ -319,12 +319,12 @@ static void ipgre_err(struct sk_buff *skb, u32 info) ...@@ -319,12 +319,12 @@ static void ipgre_err(struct sk_buff *skb, u32 info)
*/ */
struct iphdr *iph = (struct iphdr*)skb->data; struct iphdr *iph = (struct iphdr*)skb->data;
u16 *p = (u16*)(skb->data+(iph->ihl<<2)); __be16 *p = (__be16*)(skb->data+(iph->ihl<<2));
int grehlen = (iph->ihl<<2) + 4; int grehlen = (iph->ihl<<2) + 4;
int type = skb->h.icmph->type; int type = skb->h.icmph->type;
int code = skb->h.icmph->code; int code = skb->h.icmph->code;
struct ip_tunnel *t; struct ip_tunnel *t;
u16 flags; __be16 flags;
flags = p[0]; flags = p[0];
if (flags&(GRE_CSUM|GRE_KEY|GRE_SEQ|GRE_ROUTING|GRE_VERSION)) { if (flags&(GRE_CSUM|GRE_KEY|GRE_SEQ|GRE_ROUTING|GRE_VERSION)) {
...@@ -370,7 +370,7 @@ static void ipgre_err(struct sk_buff *skb, u32 info) ...@@ -370,7 +370,7 @@ static void ipgre_err(struct sk_buff *skb, u32 info)
} }
read_lock(&ipgre_lock); read_lock(&ipgre_lock);
t = ipgre_tunnel_lookup(iph->daddr, iph->saddr, (flags&GRE_KEY) ? *(((u32*)p) + (grehlen>>2) - 1) : 0); t = ipgre_tunnel_lookup(iph->daddr, iph->saddr, (flags&GRE_KEY) ? *(((__be32*)p) + (grehlen>>2) - 1) : 0);
if (t == NULL || t->parms.iph.daddr == 0 || MULTICAST(t->parms.iph.daddr)) if (t == NULL || t->parms.iph.daddr == 0 || MULTICAST(t->parms.iph.daddr))
goto out; goto out;
...@@ -388,14 +388,14 @@ out: ...@@ -388,14 +388,14 @@ out:
#else #else
struct iphdr *iph = (struct iphdr*)dp; struct iphdr *iph = (struct iphdr*)dp;
struct iphdr *eiph; struct iphdr *eiph;
u16 *p = (u16*)(dp+(iph->ihl<<2)); __be16 *p = (__be16*)(dp+(iph->ihl<<2));
int type = skb->h.icmph->type; int type = skb->h.icmph->type;
int code = skb->h.icmph->code; int code = skb->h.icmph->code;
int rel_type = 0; int rel_type = 0;
int rel_code = 0; int rel_code = 0;
__be32 rel_info = 0; __be32 rel_info = 0;
__u32 n = 0; __u32 n = 0;
u16 flags; __be16 flags;
int grehlen = (iph->ihl<<2) + 4; int grehlen = (iph->ihl<<2) + 4;
struct sk_buff *skb2; struct sk_buff *skb2;
struct flowi fl; struct flowi fl;
...@@ -556,9 +556,9 @@ static int ipgre_rcv(struct sk_buff *skb) ...@@ -556,9 +556,9 @@ static int ipgre_rcv(struct sk_buff *skb)
{ {
struct iphdr *iph; struct iphdr *iph;
u8 *h; u8 *h;
u16 flags; __be16 flags;
u16 csum = 0; u16 csum = 0;
u32 key = 0; __be32 key = 0;
u32 seqno = 0; u32 seqno = 0;
struct ip_tunnel *tunnel; struct ip_tunnel *tunnel;
int offset = 4; int offset = 4;
...@@ -568,7 +568,7 @@ static int ipgre_rcv(struct sk_buff *skb) ...@@ -568,7 +568,7 @@ static int ipgre_rcv(struct sk_buff *skb)
iph = skb->nh.iph; iph = skb->nh.iph;
h = skb->data; h = skb->data;
flags = *(u16*)h; flags = *(__be16*)h;
if (flags&(GRE_CSUM|GRE_KEY|GRE_ROUTING|GRE_SEQ|GRE_VERSION)) { if (flags&(GRE_CSUM|GRE_KEY|GRE_ROUTING|GRE_SEQ|GRE_VERSION)) {
/* - Version must be 0. /* - Version must be 0.
...@@ -592,11 +592,11 @@ static int ipgre_rcv(struct sk_buff *skb) ...@@ -592,11 +592,11 @@ static int ipgre_rcv(struct sk_buff *skb)
offset += 4; offset += 4;
} }
if (flags&GRE_KEY) { if (flags&GRE_KEY) {
key = *(u32*)(h + offset); key = *(__be32*)(h + offset);
offset += 4; offset += 4;
} }
if (flags&GRE_SEQ) { if (flags&GRE_SEQ) {
seqno = ntohl(*(u32*)(h + offset)); seqno = ntohl(*(__be32*)(h + offset));
offset += 4; offset += 4;
} }
} }
...@@ -605,7 +605,7 @@ static int ipgre_rcv(struct sk_buff *skb) ...@@ -605,7 +605,7 @@ static int ipgre_rcv(struct sk_buff *skb)
if ((tunnel = ipgre_tunnel_lookup(iph->saddr, iph->daddr, key)) != NULL) { if ((tunnel = ipgre_tunnel_lookup(iph->saddr, iph->daddr, key)) != NULL) {
secpath_reset(skb); secpath_reset(skb);
skb->protocol = *(u16*)(h + 2); skb->protocol = *(__be16*)(h + 2);
/* WCCP version 1 and 2 protocol decoding. /* WCCP version 1 and 2 protocol decoding.
* - Change protocol to IP * - Change protocol to IP
* - When dealing with WCCPv2, Skip extra 4 bytes in GRE header * - When dealing with WCCPv2, Skip extra 4 bytes in GRE header
...@@ -673,13 +673,13 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -673,13 +673,13 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
struct iphdr *old_iph = skb->nh.iph; struct iphdr *old_iph = skb->nh.iph;
struct iphdr *tiph; struct iphdr *tiph;
u8 tos; u8 tos;
u16 df; __be16 df;
struct rtable *rt; /* Route to the other host */ struct rtable *rt; /* Route to the other host */
struct net_device *tdev; /* Device to other host */ struct net_device *tdev; /* Device to other host */
struct iphdr *iph; /* Our new IP header */ struct iphdr *iph; /* Our new IP header */
int max_headroom; /* The extra header space needed */ int max_headroom; /* The extra header space needed */
int gre_hlen; int gre_hlen;
u32 dst; __be32 dst;
int mtu; int mtu;
if (tunnel->recursion++) { if (tunnel->recursion++) {
...@@ -860,11 +860,11 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -860,11 +860,11 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
iph->ttl = dst_metric(&rt->u.dst, RTAX_HOPLIMIT); iph->ttl = dst_metric(&rt->u.dst, RTAX_HOPLIMIT);
} }
((u16*)(iph+1))[0] = tunnel->parms.o_flags; ((__be16*)(iph+1))[0] = tunnel->parms.o_flags;
((u16*)(iph+1))[1] = skb->protocol; ((__be16*)(iph+1))[1] = skb->protocol;
if (tunnel->parms.o_flags&(GRE_KEY|GRE_CSUM|GRE_SEQ)) { if (tunnel->parms.o_flags&(GRE_KEY|GRE_CSUM|GRE_SEQ)) {
u32 *ptr = (u32*)(((u8*)iph) + tunnel->hlen - 4); __be32 *ptr = (__be32*)(((u8*)iph) + tunnel->hlen - 4);
if (tunnel->parms.o_flags&GRE_SEQ) { if (tunnel->parms.o_flags&GRE_SEQ) {
++tunnel->o_seqno; ++tunnel->o_seqno;
...@@ -877,7 +877,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -877,7 +877,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
} }
if (tunnel->parms.o_flags&GRE_CSUM) { if (tunnel->parms.o_flags&GRE_CSUM) {
*ptr = 0; *ptr = 0;
*(__u16*)ptr = ip_compute_csum((void*)(iph+1), skb->len - sizeof(struct iphdr)); *(__be16*)ptr = ip_compute_csum((void*)(iph+1), skb->len - sizeof(struct iphdr));
} }
} }
...@@ -1068,7 +1068,7 @@ static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned sh ...@@ -1068,7 +1068,7 @@ static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned sh
{ {
struct ip_tunnel *t = netdev_priv(dev); struct ip_tunnel *t = netdev_priv(dev);
struct iphdr *iph = (struct iphdr *)skb_push(skb, t->hlen); struct iphdr *iph = (struct iphdr *)skb_push(skb, t->hlen);
u16 *p = (u16*)(iph+1); __be16 *p = (__be16*)(iph+1);
memcpy(iph, &t->parms.iph, sizeof(struct iphdr)); memcpy(iph, &t->parms.iph, sizeof(struct iphdr));
p[0] = t->parms.o_flags; p[0] = t->parms.o_flags;
......
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
#include <net/xfrm.h> #include <net/xfrm.h>
#define HASH_SIZE 16 #define HASH_SIZE 16
#define HASH(addr) ((addr^(addr>>4))&0xF) #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF)
static int ipip_fb_tunnel_init(struct net_device *dev); static int ipip_fb_tunnel_init(struct net_device *dev);
static int ipip_tunnel_init(struct net_device *dev); static int ipip_tunnel_init(struct net_device *dev);
...@@ -134,7 +134,7 @@ static struct ip_tunnel **tunnels[4] = { tunnels_wc, tunnels_l, tunnels_r, tunne ...@@ -134,7 +134,7 @@ static struct ip_tunnel **tunnels[4] = { tunnels_wc, tunnels_l, tunnels_r, tunne
static DEFINE_RWLOCK(ipip_lock); static DEFINE_RWLOCK(ipip_lock);
static struct ip_tunnel * ipip_tunnel_lookup(u32 remote, u32 local) static struct ip_tunnel * ipip_tunnel_lookup(__be32 remote, __be32 local)
{ {
unsigned h0 = HASH(remote); unsigned h0 = HASH(remote);
unsigned h1 = HASH(local); unsigned h1 = HASH(local);
...@@ -160,8 +160,8 @@ static struct ip_tunnel * ipip_tunnel_lookup(u32 remote, u32 local) ...@@ -160,8 +160,8 @@ static struct ip_tunnel * ipip_tunnel_lookup(u32 remote, u32 local)
static struct ip_tunnel **ipip_bucket(struct ip_tunnel *t) static struct ip_tunnel **ipip_bucket(struct ip_tunnel *t)
{ {
u32 remote = t->parms.iph.daddr; __be32 remote = t->parms.iph.daddr;
u32 local = t->parms.iph.saddr; __be32 local = t->parms.iph.saddr;
unsigned h = 0; unsigned h = 0;
int prio = 0; int prio = 0;
...@@ -203,8 +203,8 @@ static void ipip_tunnel_link(struct ip_tunnel *t) ...@@ -203,8 +203,8 @@ static void ipip_tunnel_link(struct ip_tunnel *t)
static struct ip_tunnel * ipip_tunnel_locate(struct ip_tunnel_parm *parms, int create) static struct ip_tunnel * ipip_tunnel_locate(struct ip_tunnel_parm *parms, int create)
{ {
u32 remote = parms->iph.daddr; __be32 remote = parms->iph.daddr;
u32 local = parms->iph.saddr; __be32 local = parms->iph.saddr;
struct ip_tunnel *t, **tp, *nt; struct ip_tunnel *t, **tp, *nt;
struct net_device *dev; struct net_device *dev;
unsigned h = 0; unsigned h = 0;
...@@ -519,13 +519,13 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -519,13 +519,13 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
struct net_device_stats *stats = &tunnel->stat; struct net_device_stats *stats = &tunnel->stat;
struct iphdr *tiph = &tunnel->parms.iph; struct iphdr *tiph = &tunnel->parms.iph;
u8 tos = tunnel->parms.iph.tos; u8 tos = tunnel->parms.iph.tos;
u16 df = tiph->frag_off; __be16 df = tiph->frag_off;
struct rtable *rt; /* Route to the other host */ struct rtable *rt; /* Route to the other host */
struct net_device *tdev; /* Device to other host */ struct net_device *tdev; /* Device to other host */
struct iphdr *old_iph = skb->nh.iph; struct iphdr *old_iph = skb->nh.iph;
struct iphdr *iph; /* Our new IP header */ struct iphdr *iph; /* Our new IP header */
int max_headroom; /* The extra header space needed */ int max_headroom; /* The extra header space needed */
u32 dst = tiph->daddr; __be32 dst = tiph->daddr;
int mtu; int mtu;
if (tunnel->recursion++) { if (tunnel->recursion++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment