Commit 4bedb452 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by David S. Miller

[SK_BUFF]: Introduce udp_hdr(), remove skb->h.uh

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d9edf9e2
...@@ -944,9 +944,9 @@ static inline void gfar_tx_checksum(struct sk_buff *skb, struct txfcb *fcb) ...@@ -944,9 +944,9 @@ static inline void gfar_tx_checksum(struct sk_buff *skb, struct txfcb *fcb)
/* And provide the already calculated phcs */ /* And provide the already calculated phcs */
if (ip_hdr(skb)->protocol == IPPROTO_UDP) { if (ip_hdr(skb)->protocol == IPPROTO_UDP) {
flags |= TXFCB_UDP; flags |= TXFCB_UDP;
fcb->phcs = skb->h.uh->check; fcb->phcs = udp_hdr(skb)->check;
} else } else
fcb->phcs = skb->h.th->check; fcb->phcs = udp_hdr(skb)->check;
/* l3os is the distance between the start of the /* l3os is the distance between the start of the
* frame (skb->data) and the start of the IP hdr. * frame (skb->data) and the start of the IP hdr.
......
...@@ -1422,7 +1422,7 @@ static int ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1422,7 +1422,7 @@ static int ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev)
csoff = ETH_HLEN + (ih->ihl << 2); csoff = ETH_HLEN + (ih->ihl << 2);
if (proto == IPPROTO_UDP) { if (proto == IPPROTO_UDP) {
csoff += offsetof(struct udphdr, check); csoff += offsetof(struct udphdr, check);
skb->h.uh->check = csum; udp_hdr(skb)->check = csum;
} }
if (proto == IPPROTO_TCP) { if (proto == IPPROTO_TCP) {
csoff += offsetof(struct tcphdr, check); csoff += offsetof(struct tcphdr, check);
......
...@@ -1166,7 +1166,7 @@ static void eth_tx_submit_descs_for_skb(struct mv643xx_private *mp, ...@@ -1166,7 +1166,7 @@ static void eth_tx_submit_descs_for_skb(struct mv643xx_private *mp,
switch (ip_hdr(skb)->protocol) { switch (ip_hdr(skb)->protocol) {
case IPPROTO_UDP: case IPPROTO_UDP:
cmd_sts |= ETH_UDP_FRAME; cmd_sts |= ETH_UDP_FRAME;
desc->l4i_chk = skb->h.uh->check; desc->l4i_chk = udp_hdr(skb)->check;
break; break;
case IPPROTO_TCP: case IPPROTO_TCP:
desc->l4i_chk = skb->h.th->check; desc->l4i_chk = skb->h.th->check;
......
...@@ -238,7 +238,6 @@ struct sk_buff { ...@@ -238,7 +238,6 @@ struct sk_buff {
union { union {
struct tcphdr *th; struct tcphdr *th;
struct udphdr *uh;
struct icmphdr *icmph; struct icmphdr *icmph;
struct iphdr *ipiph; struct iphdr *ipiph;
struct ipv6hdr *ipv6h; struct ipv6hdr *ipv6h;
......
...@@ -26,6 +26,15 @@ struct udphdr { ...@@ -26,6 +26,15 @@ struct udphdr {
__sum16 check; __sum16 check;
}; };
#ifdef __KERNEL__
#include <linux/skbuff.h>
static inline struct udphdr *udp_hdr(const struct sk_buff *skb)
{
return (struct udphdr *)skb->h.raw;
}
#endif
/* UDP socket options */ /* UDP socket options */
#define UDP_CORK 1 /* Never send partially complete segments */ #define UDP_CORK 1 /* Never send partially complete segments */
#define UDP_ENCAP 100 /* Set the socket to accept encapsulated packets */ #define UDP_ENCAP 100 /* Set the socket to accept encapsulated packets */
......
...@@ -101,7 +101,7 @@ static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh) ...@@ -101,7 +101,7 @@ static inline int udplite_sender_cscov(struct udp_sock *up, struct udphdr *uh)
static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb) static inline __wsum udplite_csum_outgoing(struct sock *sk, struct sk_buff *skb)
{ {
int cscov = udplite_sender_cscov(udp_sk(sk), skb->h.uh); int cscov = udplite_sender_cscov(udp_sk(sk), udp_hdr(skb));
__wsum csum = 0; __wsum csum = 0;
skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */ skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */
......
...@@ -296,7 +296,9 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) ...@@ -296,7 +296,9 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
memcpy(skb->data, msg, len); memcpy(skb->data, msg, len);
skb->len += len; skb->len += len;
skb->h.uh = udph = (struct udphdr *) skb_push(skb, sizeof(*udph)); skb_push(skb, sizeof(*udph));
skb_reset_transport_header(skb);
udph = udp_hdr(skb);
udph->source = htons(np->local_port); udph->source = htons(np->local_port);
udph->dest = htons(np->remote_port); udph->dest = htons(np->remote_port);
udph->len = htons(udp_len); udph->len = htons(udp_len);
......
...@@ -2392,7 +2392,7 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, ...@@ -2392,7 +2392,7 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
skb->dev = odev; skb->dev = odev;
skb->pkt_type = PACKET_HOST; skb->pkt_type = PACKET_HOST;
skb->nh.raw = (unsigned char *)iph; skb->nh.raw = (unsigned char *)iph;
skb->h.uh = udph; skb->h.raw = (unsigned char *)udph;
if (pkt_dev->nfrags <= 0) if (pkt_dev->nfrags <= 0)
pgh = (struct pktgen_hdr *)skb_put(skb, datalen); pgh = (struct pktgen_hdr *)skb_put(skb, datalen);
...@@ -2737,7 +2737,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, ...@@ -2737,7 +2737,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
skb->dev = odev; skb->dev = odev;
skb->pkt_type = PACKET_HOST; skb->pkt_type = PACKET_HOST;
skb->nh.raw = (unsigned char *)iph; skb->nh.raw = (unsigned char *)iph;
skb->h.uh = udph; skb->h.raw = (unsigned char *)udph;
if (pkt_dev->nfrags <= 0) if (pkt_dev->nfrags <= 0)
pgh = (struct pktgen_hdr *)skb_put(skb, datalen); pgh = (struct pktgen_hdr *)skb_put(skb, datalen);
......
...@@ -420,7 +420,7 @@ static void udp4_hwcsum_outgoing(struct sock *sk, struct sk_buff *skb, ...@@ -420,7 +420,7 @@ static void udp4_hwcsum_outgoing(struct sock *sk, struct sk_buff *skb,
__be32 src, __be32 dst, int len ) __be32 src, __be32 dst, int len )
{ {
unsigned int offset; unsigned int offset;
struct udphdr *uh = skb->h.uh; struct udphdr *uh = udp_hdr(skb);
__wsum csum = 0; __wsum csum = 0;
if (skb_queue_len(&sk->sk_write_queue) == 1) { if (skb_queue_len(&sk->sk_write_queue) == 1) {
...@@ -470,7 +470,7 @@ static int udp_push_pending_frames(struct sock *sk) ...@@ -470,7 +470,7 @@ static int udp_push_pending_frames(struct sock *sk)
/* /*
* Create a UDP header * Create a UDP header
*/ */
uh = skb->h.uh; uh = udp_hdr(skb);
uh->source = fl->fl_ip_sport; uh->source = fl->fl_ip_sport;
uh->dest = fl->fl_ip_dport; uh->dest = fl->fl_ip_dport;
uh->len = htons(up->len); uh->len = htons(up->len);
...@@ -866,7 +866,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, ...@@ -866,7 +866,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
if (sin) if (sin)
{ {
sin->sin_family = AF_INET; sin->sin_family = AF_INET;
sin->sin_port = skb->h.uh->source; sin->sin_port = udp_hdr(skb)->source;
sin->sin_addr.s_addr = ip_hdr(skb)->saddr; sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
} }
...@@ -949,7 +949,7 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb) ...@@ -949,7 +949,7 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
return 1; return 1;
/* Now we can get the pointers */ /* Now we can get the pointers */
uh = skb->h.uh; uh = udp_hdr(skb);
udpdata = (__u8 *)uh + sizeof(struct udphdr); udpdata = (__u8 *)uh + sizeof(struct udphdr);
udpdata32 = (__be32 *)udpdata; udpdata32 = (__be32 *)udpdata;
...@@ -1207,7 +1207,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[], ...@@ -1207,7 +1207,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
int proto) int proto)
{ {
struct sock *sk; struct sock *sk;
struct udphdr *uh = skb->h.uh; struct udphdr *uh = udp_hdr(skb);
unsigned short ulen; unsigned short ulen;
struct rtable *rt = (struct rtable*)skb->dst; struct rtable *rt = (struct rtable*)skb->dst;
__be32 saddr = ip_hdr(skb)->saddr; __be32 saddr = ip_hdr(skb)->saddr;
...@@ -1227,7 +1227,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[], ...@@ -1227,7 +1227,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
/* UDP validates ulen. */ /* UDP validates ulen. */
if (ulen < sizeof(*uh) || pskb_trim_rcsum(skb, ulen)) if (ulen < sizeof(*uh) || pskb_trim_rcsum(skb, ulen))
goto short_packet; goto short_packet;
uh = skb->h.uh; uh = udp_hdr(skb);
} }
if (udp4_csum_init(skb, uh, proto)) if (udp4_csum_init(skb, uh, proto))
......
...@@ -172,7 +172,7 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, ...@@ -172,7 +172,7 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
sin6 = (struct sockaddr_in6 *) msg->msg_name; sin6 = (struct sockaddr_in6 *) msg->msg_name;
sin6->sin6_family = AF_INET6; sin6->sin6_family = AF_INET6;
sin6->sin6_port = skb->h.uh->source; sin6->sin6_port = udp_hdr(skb)->source;
sin6->sin6_flowinfo = 0; sin6->sin6_flowinfo = 0;
sin6->sin6_scope_id = 0; sin6->sin6_scope_id = 0;
...@@ -346,7 +346,7 @@ static int __udp6_lib_mcast_deliver(struct sk_buff *skb, struct in6_addr *saddr, ...@@ -346,7 +346,7 @@ static int __udp6_lib_mcast_deliver(struct sk_buff *skb, struct in6_addr *saddr,
struct in6_addr *daddr, struct hlist_head udptable[]) struct in6_addr *daddr, struct hlist_head udptable[])
{ {
struct sock *sk, *sk2; struct sock *sk, *sk2;
const struct udphdr *uh = skb->h.uh; const struct udphdr *uh = udp_hdr(skb);
int dif; int dif;
read_lock(&udp_hash_lock); read_lock(&udp_hash_lock);
...@@ -420,7 +420,7 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[], ...@@ -420,7 +420,7 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[],
saddr = &ipv6_hdr(skb)->saddr; saddr = &ipv6_hdr(skb)->saddr;
daddr = &ipv6_hdr(skb)->daddr; daddr = &ipv6_hdr(skb)->daddr;
uh = skb->h.uh; uh = udp_hdr(skb);
ulen = ntohs(uh->len); ulen = ntohs(uh->len);
if (ulen > skb->len) if (ulen > skb->len)
...@@ -441,7 +441,7 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[], ...@@ -441,7 +441,7 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[],
goto short_packet; goto short_packet;
saddr = &ipv6_hdr(skb)->saddr; saddr = &ipv6_hdr(skb)->saddr;
daddr = &ipv6_hdr(skb)->daddr; daddr = &ipv6_hdr(skb)->daddr;
uh = skb->h.uh; uh = udp_hdr(skb);
} }
} }
...@@ -534,7 +534,7 @@ static int udp_v6_push_pending_frames(struct sock *sk) ...@@ -534,7 +534,7 @@ static int udp_v6_push_pending_frames(struct sock *sk)
/* /*
* Create a UDP header * Create a UDP header
*/ */
uh = skb->h.uh; uh = udp_hdr(skb);
uh->source = fl->fl_ip_sport; uh->source = fl->fl_ip_sport;
uh->dest = fl->fl_ip_dport; uh->dest = fl->fl_ip_dport;
uh->len = htons(up->len); uh->len = htons(up->len);
......
...@@ -229,10 +229,10 @@ int rxrpc_connection_lookup(struct rxrpc_peer *peer, ...@@ -229,10 +229,10 @@ int rxrpc_connection_lookup(struct rxrpc_peer *peer,
_enter("%p{{%hu}},%u,%hu", _enter("%p{{%hu}},%u,%hu",
peer, peer,
peer->trans->port, peer->trans->port,
ntohs(pkt->h.uh->source), ntohs(udp_hdr(pkt)->source),
ntohs(msg->hdr.serviceId)); ntohs(msg->hdr.serviceId));
x_port = pkt->h.uh->source; x_port = udp_hdr(pkt)->source;
x_epoch = msg->hdr.epoch; x_epoch = msg->hdr.epoch;
x_clflag = msg->hdr.flags & RXRPC_CLIENT_INITIATED; x_clflag = msg->hdr.flags & RXRPC_CLIENT_INITIATED;
x_connid = htonl(ntohl(msg->hdr.cid) & RXRPC_CIDMASK); x_connid = htonl(ntohl(msg->hdr.cid) & RXRPC_CIDMASK);
......
...@@ -479,7 +479,7 @@ void rxrpc_trans_receive_packet(struct rxrpc_transport *trans) ...@@ -479,7 +479,7 @@ void rxrpc_trans_receive_packet(struct rxrpc_transport *trans)
} }
addr = ip_hdr(pkt)->saddr; addr = ip_hdr(pkt)->saddr;
port = pkt->h.uh->source; port = udp_hdr(pkt)->source;
_net("Rx Received UDP packet from %08x:%04hu", _net("Rx Received UDP packet from %08x:%04hu",
ntohl(addr), ntohs(port)); ntohl(addr), ntohs(port));
...@@ -625,7 +625,7 @@ int rxrpc_trans_immediate_abort(struct rxrpc_transport *trans, ...@@ -625,7 +625,7 @@ int rxrpc_trans_immediate_abort(struct rxrpc_transport *trans,
memset(&sin,0,sizeof(sin)); memset(&sin,0,sizeof(sin));
sin.sin_family = AF_INET; sin.sin_family = AF_INET;
sin.sin_port = msg->pkt->h.uh->source; sin.sin_port = udp_hdr(msg->pkt)->source;
sin.sin_addr.s_addr = ip_hdr(msg->pkt)->saddr; sin.sin_addr.s_addr = ip_hdr(msg->pkt)->saddr;
msghdr.msg_name = &sin; msghdr.msg_name = &sin;
......
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