[SK_BUFF]: Introduce skb_network_header()
For the places where we need a pointer to the network header, it is still legal to touch skb->nh.raw directly if just adding to, subtracting from or setting it to another layer header. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
bbe735e424
commit
d56f90a7c9
@@ -40,7 +40,7 @@
|
||||
void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
|
||||
__be32 daddr, struct rtable *rt, int is_frag)
|
||||
{
|
||||
unsigned char * iph = skb->nh.raw;
|
||||
unsigned char *iph = skb_network_header(skb);
|
||||
|
||||
memcpy(&(IPCB(skb)->opt), opt, sizeof(struct ip_options));
|
||||
memcpy(iph+sizeof(struct iphdr), opt->__data, opt->optlen);
|
||||
@@ -104,7 +104,7 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
|
||||
return 0;
|
||||
}
|
||||
|
||||
sptr = skb->nh.raw;
|
||||
sptr = skb_network_header(skb);
|
||||
dptr = dopt->__data;
|
||||
|
||||
if (skb->dst)
|
||||
@@ -217,7 +217,7 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
|
||||
|
||||
void ip_options_fragment(struct sk_buff * skb)
|
||||
{
|
||||
unsigned char * optptr = skb->nh.raw + sizeof(struct iphdr);
|
||||
unsigned char *optptr = skb_network_header(skb) + sizeof(struct iphdr);
|
||||
struct ip_options * opt = &(IPCB(skb)->opt);
|
||||
int l = opt->optlen;
|
||||
int optlen;
|
||||
@@ -264,7 +264,7 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb)
|
||||
|
||||
if (!opt) {
|
||||
opt = &(IPCB(skb)->opt);
|
||||
iph = skb->nh.raw;
|
||||
iph = skb_network_header(skb);
|
||||
opt->optlen = ((struct iphdr *)iph)->ihl*4 - sizeof(struct iphdr);
|
||||
optptr = iph + sizeof(struct iphdr);
|
||||
opt->is_data = 0;
|
||||
@@ -563,7 +563,7 @@ void ip_forward_options(struct sk_buff *skb)
|
||||
struct ip_options * opt = &(IPCB(skb)->opt);
|
||||
unsigned char * optptr;
|
||||
struct rtable *rt = (struct rtable*)skb->dst;
|
||||
unsigned char *raw = skb->nh.raw;
|
||||
unsigned char *raw = skb_network_header(skb);
|
||||
|
||||
if (opt->rr_needaddr) {
|
||||
optptr = (unsigned char *)raw + opt->rr;
|
||||
@@ -609,7 +609,7 @@ int ip_options_rcv_srr(struct sk_buff *skb)
|
||||
int srrspace, srrptr;
|
||||
__be32 nexthop;
|
||||
struct iphdr *iph = skb->nh.iph;
|
||||
unsigned char * optptr = skb->nh.raw + opt->srr;
|
||||
unsigned char *optptr = skb_network_header(skb) + opt->srr;
|
||||
struct rtable *rt = (struct rtable*)skb->dst;
|
||||
struct rtable *rt2;
|
||||
int err;
|
||||
|
Reference in New Issue
Block a user