You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[NET] IPV4: Fix whitespace errors.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
642656518b
commit
e905a9edab
+35
-35
@@ -550,7 +550,7 @@ int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
sock->state = SS_CONNECTING;
|
||||
sock->state = SS_CONNECTING;
|
||||
|
||||
/* Just entered SS_CONNECTING state; the only
|
||||
* difference is that return value in non-blocking
|
||||
@@ -878,36 +878,36 @@ static struct net_proto_family inet_family_ops = {
|
||||
*/
|
||||
static struct inet_protosw inetsw_array[] =
|
||||
{
|
||||
{
|
||||
.type = SOCK_STREAM,
|
||||
.protocol = IPPROTO_TCP,
|
||||
.prot = &tcp_prot,
|
||||
.ops = &inet_stream_ops,
|
||||
.capability = -1,
|
||||
.no_check = 0,
|
||||
.flags = INET_PROTOSW_PERMANENT |
|
||||
{
|
||||
.type = SOCK_STREAM,
|
||||
.protocol = IPPROTO_TCP,
|
||||
.prot = &tcp_prot,
|
||||
.ops = &inet_stream_ops,
|
||||
.capability = -1,
|
||||
.no_check = 0,
|
||||
.flags = INET_PROTOSW_PERMANENT |
|
||||
INET_PROTOSW_ICSK,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
.type = SOCK_DGRAM,
|
||||
.protocol = IPPROTO_UDP,
|
||||
.prot = &udp_prot,
|
||||
.ops = &inet_dgram_ops,
|
||||
.capability = -1,
|
||||
.no_check = UDP_CSUM_DEFAULT,
|
||||
.flags = INET_PROTOSW_PERMANENT,
|
||||
{
|
||||
.type = SOCK_DGRAM,
|
||||
.protocol = IPPROTO_UDP,
|
||||
.prot = &udp_prot,
|
||||
.ops = &inet_dgram_ops,
|
||||
.capability = -1,
|
||||
.no_check = UDP_CSUM_DEFAULT,
|
||||
.flags = INET_PROTOSW_PERMANENT,
|
||||
},
|
||||
|
||||
|
||||
|
||||
{
|
||||
.type = SOCK_RAW,
|
||||
.protocol = IPPROTO_IP, /* wild card */
|
||||
.prot = &raw_prot,
|
||||
.ops = &inet_sockraw_ops,
|
||||
.capability = CAP_NET_RAW,
|
||||
.no_check = UDP_CSUM_DEFAULT,
|
||||
.flags = INET_PROTOSW_REUSE,
|
||||
.type = SOCK_RAW,
|
||||
.protocol = IPPROTO_IP, /* wild card */
|
||||
.prot = &raw_prot,
|
||||
.ops = &inet_sockraw_ops,
|
||||
.capability = CAP_NET_RAW,
|
||||
.no_check = UDP_CSUM_DEFAULT,
|
||||
.flags = INET_PROTOSW_REUSE,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -946,7 +946,7 @@ void inet_register_protosw(struct inet_protosw *p)
|
||||
/* Add the new entry after the last permanent entry if any, so that
|
||||
* the new entry does not override a permanent entry when matched with
|
||||
* a wild-card protocol. But it is allowed to override any existing
|
||||
* non-permanent entry. This means that when we remove this entry, the
|
||||
* non-permanent entry. This means that when we remove this entry, the
|
||||
* system automatically returns to the old behavior.
|
||||
*/
|
||||
list_add_rcu(&p->list, last_perm);
|
||||
@@ -1073,7 +1073,7 @@ int inet_sk_rebuild_header(struct sock *sk)
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
security_sk_classify_flow(sk, &fl);
|
||||
err = ip_route_output_flow(&rt, &fl, sk, 0);
|
||||
}
|
||||
@@ -1273,10 +1273,10 @@ static int __init inet_init(void)
|
||||
goto out_unregister_udp_proto;
|
||||
|
||||
/*
|
||||
* Tell SOCKET that we are alive...
|
||||
* Tell SOCKET that we are alive...
|
||||
*/
|
||||
|
||||
(void)sock_register(&inet_family_ops);
|
||||
(void)sock_register(&inet_family_ops);
|
||||
|
||||
/*
|
||||
* Add all the base protocols.
|
||||
@@ -1306,9 +1306,9 @@ static int __init inet_init(void)
|
||||
|
||||
arp_init();
|
||||
|
||||
/*
|
||||
* Set the IP module up
|
||||
*/
|
||||
/*
|
||||
* Set the IP module up
|
||||
*/
|
||||
|
||||
ip_init();
|
||||
|
||||
@@ -1334,11 +1334,11 @@ static int __init inet_init(void)
|
||||
#endif
|
||||
/*
|
||||
* Initialise per-cpu ipv4 mibs
|
||||
*/
|
||||
*/
|
||||
|
||||
if(init_ipv4_mibs())
|
||||
printk(KERN_CRIT "inet_init: Cannot init ipv4 mibs\n"); ;
|
||||
|
||||
|
||||
ipv4_proc_init();
|
||||
|
||||
ipfrag_init();
|
||||
|
||||
+10
-10
@@ -91,7 +91,7 @@ static int ah_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
top_iph->check = 0;
|
||||
|
||||
ahp = x->data;
|
||||
ah->hdrlen = (XFRM_ALIGN8(sizeof(struct ip_auth_hdr) +
|
||||
ah->hdrlen = (XFRM_ALIGN8(sizeof(struct ip_auth_hdr) +
|
||||
ahp->icv_trunc_len) >> 2) - 2;
|
||||
|
||||
ah->reserved = 0;
|
||||
@@ -135,9 +135,9 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
ah = (struct ip_auth_hdr*)skb->data;
|
||||
ahp = x->data;
|
||||
ah_hlen = (ah->hdrlen + 2) << 2;
|
||||
|
||||
|
||||
if (ah_hlen != XFRM_ALIGN8(sizeof(struct ip_auth_hdr) + ahp->icv_full_len) &&
|
||||
ah_hlen != XFRM_ALIGN8(sizeof(struct ip_auth_hdr) + ahp->icv_trunc_len))
|
||||
ah_hlen != XFRM_ALIGN8(sizeof(struct ip_auth_hdr) + ahp->icv_trunc_len))
|
||||
goto out;
|
||||
|
||||
if (!pskb_may_pull(skb, ah_hlen))
|
||||
@@ -166,9 +166,9 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
if (ip_clear_mutable_options(iph, &dummy))
|
||||
goto out;
|
||||
}
|
||||
{
|
||||
{
|
||||
u8 auth_data[MAX_AH_AUTH_LEN];
|
||||
|
||||
|
||||
memcpy(auth_data, ah->auth_data, ahp->icv_trunc_len);
|
||||
skb_push(skb, ihl);
|
||||
err = ah_mac_digest(ahp, skb, ah->auth_data);
|
||||
@@ -237,7 +237,7 @@ static int ah_init_state(struct xfrm_state *x)
|
||||
ahp->tfm = tfm;
|
||||
if (crypto_hash_setkey(tfm, ahp->key, ahp->key_len))
|
||||
goto error;
|
||||
|
||||
|
||||
/*
|
||||
* Lookup the algorithm description maintained by xfrm_algo,
|
||||
* verify crypto transform properties, and store information
|
||||
@@ -254,16 +254,16 @@ static int ah_init_state(struct xfrm_state *x)
|
||||
aalg_desc->uinfo.auth.icv_fullbits/8);
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
||||
ahp->icv_full_len = aalg_desc->uinfo.auth.icv_fullbits/8;
|
||||
ahp->icv_trunc_len = aalg_desc->uinfo.auth.icv_truncbits/8;
|
||||
|
||||
|
||||
BUG_ON(ahp->icv_trunc_len > MAX_AH_AUTH_LEN);
|
||||
|
||||
|
||||
ahp->work_icv = kmalloc(ahp->icv_full_len, GFP_KERNEL);
|
||||
if (!ahp->work_icv)
|
||||
goto error;
|
||||
|
||||
|
||||
x->props.header_len = XFRM_ALIGN8(sizeof(struct ip_auth_hdr) + ahp->icv_trunc_len);
|
||||
if (x->props.mode == XFRM_MODE_TUNNEL)
|
||||
x->props.header_len += sizeof(struct iphdr);
|
||||
|
||||
+33
-33
@@ -15,9 +15,9 @@
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* Fixes:
|
||||
* Alan Cox : Removed the Ethernet assumptions in
|
||||
* Alan Cox : Removed the Ethernet assumptions in
|
||||
* Florian's code
|
||||
* Alan Cox : Fixed some small errors in the ARP
|
||||
* Alan Cox : Fixed some small errors in the ARP
|
||||
* logic
|
||||
* Alan Cox : Allow >4K in /proc
|
||||
* Alan Cox : Make ARP add its own protocol entry
|
||||
@@ -39,18 +39,18 @@
|
||||
* Jonathan Naylor : Only lookup the hardware address for
|
||||
* the correct hardware type.
|
||||
* Germano Caronni : Assorted subtle races.
|
||||
* Craig Schlenter : Don't modify permanent entry
|
||||
* Craig Schlenter : Don't modify permanent entry
|
||||
* during arp_rcv.
|
||||
* Russ Nelson : Tidied up a few bits.
|
||||
* Alexey Kuznetsov: Major changes to caching and behaviour,
|
||||
* eg intelligent arp probing and
|
||||
* eg intelligent arp probing and
|
||||
* generation
|
||||
* of host down events.
|
||||
* Alan Cox : Missing unlock in device events.
|
||||
* Eckes : ARP ioctl control errors.
|
||||
* Alexey Kuznetsov: Arp free fix.
|
||||
* Manuel Rodriguez: Gratuitous ARP.
|
||||
* Jonathan Layes : Added arpd support through kerneld
|
||||
* Jonathan Layes : Added arpd support through kerneld
|
||||
* message queue (960314)
|
||||
* Mike Shaver : /proc/sys/net/ipv4/arp_* support
|
||||
* Mike McLagan : Routing by source
|
||||
@@ -210,7 +210,7 @@ int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir)
|
||||
case ARPHRD_FDDI:
|
||||
case ARPHRD_IEEE802:
|
||||
ip_eth_mc_map(addr, haddr);
|
||||
return 0;
|
||||
return 0;
|
||||
case ARPHRD_IEEE802_TR:
|
||||
ip_tr_mc_map(addr, haddr);
|
||||
return 0;
|
||||
@@ -288,7 +288,7 @@ static int arp_constructor(struct neighbour *neigh)
|
||||
switch (dev->type) {
|
||||
default:
|
||||
break;
|
||||
case ARPHRD_ROSE:
|
||||
case ARPHRD_ROSE:
|
||||
#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
|
||||
case ARPHRD_AX25:
|
||||
#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
|
||||
@@ -425,18 +425,18 @@ static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev)
|
||||
struct flowi fl = { .nl_u = { .ip4_u = { .daddr = sip,
|
||||
.saddr = tip } } };
|
||||
struct rtable *rt;
|
||||
int flag = 0;
|
||||
int flag = 0;
|
||||
/*unsigned long now; */
|
||||
|
||||
if (ip_route_output_key(&rt, &fl) < 0)
|
||||
if (ip_route_output_key(&rt, &fl) < 0)
|
||||
return 1;
|
||||
if (rt->u.dst.dev != dev) {
|
||||
if (rt->u.dst.dev != dev) {
|
||||
NET_INC_STATS_BH(LINUX_MIB_ARPFILTER);
|
||||
flag = 1;
|
||||
}
|
||||
ip_rt_put(rt);
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
ip_rt_put(rt);
|
||||
return flag;
|
||||
}
|
||||
|
||||
/* OBSOLETE FUNCTIONS */
|
||||
|
||||
@@ -490,7 +490,7 @@ int arp_find(unsigned char *haddr, struct sk_buff *skb)
|
||||
n->used = jiffies;
|
||||
if (n->nud_state&NUD_VALID || neigh_event_send(n, skb) == 0) {
|
||||
read_lock_bh(&n->lock);
|
||||
memcpy(haddr, n->ha, dev->addr_len);
|
||||
memcpy(haddr, n->ha, dev->addr_len);
|
||||
read_unlock_bh(&n->lock);
|
||||
neigh_release(n);
|
||||
return 0;
|
||||
@@ -572,7 +572,7 @@ struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
|
||||
/*
|
||||
* Allocate a buffer
|
||||
*/
|
||||
|
||||
|
||||
skb = alloc_skb(sizeof(struct arphdr)+ 2*(dev->addr_len+4)
|
||||
+ LL_RESERVED_SPACE(dev), GFP_ATOMIC);
|
||||
if (skb == NULL)
|
||||
@@ -685,7 +685,7 @@ void arp_send(int type, int ptype, __be32 dest_ip,
|
||||
/*
|
||||
* No arp on this interface.
|
||||
*/
|
||||
|
||||
|
||||
if (dev->flags&IFF_NOARP)
|
||||
return;
|
||||
|
||||
@@ -725,7 +725,7 @@ static int arp_process(struct sk_buff *skb)
|
||||
arp = skb->nh.arph;
|
||||
|
||||
switch (dev_type) {
|
||||
default:
|
||||
default:
|
||||
if (arp->ar_pro != htons(ETH_P_IP) ||
|
||||
htons(dev_type) != arp->ar_hrd)
|
||||
goto out;
|
||||
@@ -792,7 +792,7 @@ static int arp_process(struct sk_buff *skb)
|
||||
tha = arp_ptr;
|
||||
arp_ptr += dev->addr_len;
|
||||
memcpy(&tip, arp_ptr, 4);
|
||||
/*
|
||||
/*
|
||||
* Check for bad requests for 127.x.x.x and requests for multicast
|
||||
* addresses. If this is one such, delete it.
|
||||
*/
|
||||
@@ -809,16 +809,16 @@ static int arp_process(struct sk_buff *skb)
|
||||
* Process entry. The idea here is we want to send a reply if it is a
|
||||
* request for us or if it is a request for someone else that we hold
|
||||
* a proxy for. We want to add an entry to our cache if it is a reply
|
||||
* to us or if it is a request for our address.
|
||||
* (The assumption for this last is that if someone is requesting our
|
||||
* address, they are probably intending to talk to us, so it saves time
|
||||
* if we cache their address. Their address is also probably not in
|
||||
* to us or if it is a request for our address.
|
||||
* (The assumption for this last is that if someone is requesting our
|
||||
* address, they are probably intending to talk to us, so it saves time
|
||||
* if we cache their address. Their address is also probably not in
|
||||
* our cache, since ours is not in their cache.)
|
||||
*
|
||||
*
|
||||
* Putting this another way, we only care about replies if they are to
|
||||
* us, in which case we add them to the cache. For requests, we care
|
||||
* about those for us and those for our proxies. We reply to both,
|
||||
* and in the case of requests for us we add the requester to the arp
|
||||
* and in the case of requests for us we add the requester to the arp
|
||||
* cache.
|
||||
*/
|
||||
|
||||
@@ -845,7 +845,7 @@ static int arp_process(struct sk_buff *skb)
|
||||
if (!dont_send)
|
||||
dont_send |= arp_ignore(in_dev,dev,sip,tip);
|
||||
if (!dont_send && IN_DEV_ARPFILTER(in_dev))
|
||||
dont_send |= arp_filter(sip,tip,dev);
|
||||
dont_send |= arp_filter(sip,tip,dev);
|
||||
if (!dont_send)
|
||||
arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
|
||||
|
||||
@@ -860,7 +860,7 @@ static int arp_process(struct sk_buff *skb)
|
||||
if (n)
|
||||
neigh_release(n);
|
||||
|
||||
if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
|
||||
if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
|
||||
skb->pkt_type == PACKET_HOST ||
|
||||
in_dev->arp_parms->proxy_delay == 0) {
|
||||
arp_send(ARPOP_REPLY,ETH_P_ARP,sip,dev,tip,sha,dev->dev_addr,sha);
|
||||
@@ -1039,7 +1039,7 @@ static int arp_req_set(struct arpreq *r, struct net_device * dev)
|
||||
if (r->arp_flags & ATF_PERM)
|
||||
state = NUD_PERMANENT;
|
||||
err = neigh_update(neigh, (r->arp_flags&ATF_COM) ?
|
||||
r->arp_ha.sa_data : NULL, state,
|
||||
r->arp_ha.sa_data : NULL, state,
|
||||
NEIGH_UPDATE_F_OVERRIDE|
|
||||
NEIGH_UPDATE_F_ADMIN);
|
||||
neigh_release(neigh);
|
||||
@@ -1121,7 +1121,7 @@ static int arp_req_delete(struct arpreq *r, struct net_device * dev)
|
||||
neigh = neigh_lookup(&arp_tbl, &ip, dev);
|
||||
if (neigh) {
|
||||
if (neigh->nud_state&~NUD_NOARP)
|
||||
err = neigh_update(neigh, NULL, NUD_FAILED,
|
||||
err = neigh_update(neigh, NULL, NUD_FAILED,
|
||||
NEIGH_UPDATE_F_OVERRIDE|
|
||||
NEIGH_UPDATE_F_ADMIN);
|
||||
neigh_release(neigh);
|
||||
@@ -1181,7 +1181,7 @@ int arp_ioctl(unsigned int cmd, void __user *arg)
|
||||
|
||||
switch(cmd) {
|
||||
case SIOCDARP:
|
||||
err = arp_req_delete(&r, dev);
|
||||
err = arp_req_delete(&r, dev);
|
||||
break;
|
||||
case SIOCSARP:
|
||||
err = arp_req_set(&r, dev);
|
||||
@@ -1268,14 +1268,14 @@ static char *ax2asc2(ax25_address *a, char *buf)
|
||||
|
||||
if (c != ' ') *s++ = c;
|
||||
}
|
||||
|
||||
|
||||
*s++ = '-';
|
||||
|
||||
if ((n = ((a->ax25_call[6] >> 1) & 0x0F)) > 9) {
|
||||
*s++ = '1';
|
||||
n -= 10;
|
||||
}
|
||||
|
||||
|
||||
*s++ = n + '0';
|
||||
*s++ = '\0';
|
||||
|
||||
@@ -1373,7 +1373,7 @@ static int arp_seq_open(struct inode *inode, struct file *file)
|
||||
struct seq_file *seq;
|
||||
int rc = -ENOMEM;
|
||||
struct neigh_seq_state *s = kzalloc(sizeof(*s), GFP_KERNEL);
|
||||
|
||||
|
||||
if (!s)
|
||||
goto out;
|
||||
|
||||
|
||||
+7
-7
@@ -29,12 +29,12 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int oif;
|
||||
int err;
|
||||
|
||||
|
||||
if (addr_len < sizeof(*usin))
|
||||
return -EINVAL;
|
||||
|
||||
if (usin->sin_family != AF_INET)
|
||||
return -EAFNOSUPPORT;
|
||||
if (addr_len < sizeof(*usin))
|
||||
return -EINVAL;
|
||||
|
||||
if (usin->sin_family != AF_INET)
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
sk_dst_reset(sk);
|
||||
|
||||
@@ -56,8 +56,8 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
ip_rt_put(rt);
|
||||
return -EACCES;
|
||||
}
|
||||
if (!inet->saddr)
|
||||
inet->saddr = rt->rt_src; /* Update source address */
|
||||
if (!inet->saddr)
|
||||
inet->saddr = rt->rt_src; /* Update source address */
|
||||
if (!inet->rcv_saddr)
|
||||
inet->rcv_saddr = rt->rt_src;
|
||||
inet->daddr = rt->rt_dst;
|
||||
|
||||
+23
-23
@@ -252,7 +252,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
/* 1. Deleting primary ifaddr forces deletion all secondaries
|
||||
/* 1. Deleting primary ifaddr forces deletion all secondaries
|
||||
* unless alias promotion is set
|
||||
**/
|
||||
|
||||
@@ -260,7 +260,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
|
||||
struct in_ifaddr **ifap1 = &ifa1->ifa_next;
|
||||
|
||||
while ((ifa = *ifap1) != NULL) {
|
||||
if (!(ifa->ifa_flags & IFA_F_SECONDARY) &&
|
||||
if (!(ifa->ifa_flags & IFA_F_SECONDARY) &&
|
||||
ifa1->ifa_scope <= ifa->ifa_scope)
|
||||
last_prim = ifa;
|
||||
|
||||
@@ -583,8 +583,8 @@ static __inline__ int inet_abc_len(__be32 addr)
|
||||
{
|
||||
int rc = -1; /* Something else, probably a multicast. */
|
||||
|
||||
if (ZERONET(addr))
|
||||
rc = 0;
|
||||
if (ZERONET(addr))
|
||||
rc = 0;
|
||||
else {
|
||||
__u32 haddr = ntohl(addr);
|
||||
|
||||
@@ -596,7 +596,7 @@ static __inline__ int inet_abc_len(__be32 addr)
|
||||
rc = 24;
|
||||
}
|
||||
|
||||
return rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@@ -1020,29 +1020,29 @@ int unregister_inetaddr_notifier(struct notifier_block *nb)
|
||||
* alias numbering and to create unique labels if possible.
|
||||
*/
|
||||
static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
|
||||
{
|
||||
{
|
||||
struct in_ifaddr *ifa;
|
||||
int named = 0;
|
||||
|
||||
for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
|
||||
char old[IFNAMSIZ], *dot;
|
||||
for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
|
||||
char old[IFNAMSIZ], *dot;
|
||||
|
||||
memcpy(old, ifa->ifa_label, IFNAMSIZ);
|
||||
memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
|
||||
memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
|
||||
if (named++ == 0)
|
||||
continue;
|
||||
dot = strchr(ifa->ifa_label, ':');
|
||||
if (dot == NULL) {
|
||||
sprintf(old, ":%d", named);
|
||||
if (dot == NULL) {
|
||||
sprintf(old, ":%d", named);
|
||||
dot = old;
|
||||
}
|
||||
if (strlen(dot) + strlen(dev->name) < IFNAMSIZ) {
|
||||
strcat(ifa->ifa_label, dot);
|
||||
} else {
|
||||
strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (strlen(dot) + strlen(dev->name) < IFNAMSIZ) {
|
||||
strcat(ifa->ifa_label, dot);
|
||||
} else {
|
||||
strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Called only under RTNL semaphore */
|
||||
|
||||
@@ -1539,7 +1539,7 @@ static struct devinet_sysctl_table {
|
||||
},
|
||||
},
|
||||
.devinet_conf_dir = {
|
||||
{
|
||||
{
|
||||
.ctl_name = NET_IPV4_CONF,
|
||||
.procname = "conf",
|
||||
.mode = 0555,
|
||||
@@ -1581,18 +1581,18 @@ static void devinet_sysctl_register(struct in_device *in_dev,
|
||||
}
|
||||
|
||||
if (dev) {
|
||||
dev_name = dev->name;
|
||||
dev_name = dev->name;
|
||||
t->devinet_dev[0].ctl_name = dev->ifindex;
|
||||
} else {
|
||||
dev_name = "default";
|
||||
t->devinet_dev[0].ctl_name = NET_PROTO_CONF_DEFAULT;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make a copy of dev_name, because '.procname' is regarded as const
|
||||
/*
|
||||
* Make a copy of dev_name, because '.procname' is regarded as const
|
||||
* by sysctl and we wouldn't want anyone to change it under our feet
|
||||
* (see SIOCSIFNAME).
|
||||
*/
|
||||
*/
|
||||
dev_name = kstrdup(dev_name, GFP_KERNEL);
|
||||
if (!dev_name)
|
||||
goto free;
|
||||
|
||||
+4
-4
@@ -215,7 +215,7 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
if (padlen+2 >= elen)
|
||||
goto out;
|
||||
|
||||
/* ... check padding bits here. Silly. :-) */
|
||||
/* ... check padding bits here. Silly. :-) */
|
||||
|
||||
iph = skb->nh.iph;
|
||||
ihl = iph->ihl * 4;
|
||||
@@ -236,7 +236,7 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
|
||||
ipaddr.a4 = iph->saddr;
|
||||
km_new_mapping(x, &ipaddr, uh->source);
|
||||
|
||||
|
||||
/* XXX: perhaps add an extra
|
||||
* policy check here, to see
|
||||
* if we should allow or
|
||||
@@ -245,7 +245,7 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
* address/port.
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 2) ignore UDP/TCP checksums in case
|
||||
* of NAT-T in Transport Mode, or
|
||||
@@ -284,7 +284,7 @@ static u32 esp4_get_max_size(struct xfrm_state *x, int mtu)
|
||||
mtu = ALIGN(mtu + 2, 4) + blksize - 4;
|
||||
break;
|
||||
case XFRM_MODE_BEET:
|
||||
/* The worst case. */
|
||||
/* The worst case. */
|
||||
enclen = IPV4_BEET_PHMAXLEN;
|
||||
mtu = ALIGN(mtu + enclen + 2, blksize);
|
||||
break;
|
||||
|
||||
+11
-11
@@ -160,7 +160,7 @@ unsigned inet_addr_type(__be32 addr)
|
||||
#ifdef CONFIG_IP_MULTIPLE_TABLES
|
||||
res.r = NULL;
|
||||
#endif
|
||||
|
||||
|
||||
if (ip_fib_local_table) {
|
||||
ret = RTN_UNICAST;
|
||||
if (!ip_fib_local_table->tb_lookup(ip_fib_local_table,
|
||||
@@ -378,7 +378,7 @@ static int rtentry_to_fib_config(int cmd, struct rtentry *rt,
|
||||
int len = 0;
|
||||
|
||||
mx = kzalloc(3 * nla_total_size(4), GFP_KERNEL);
|
||||
if (mx == NULL)
|
||||
if (mx == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
if (rt->rt_flags & RTF_MTU)
|
||||
@@ -400,7 +400,7 @@ static int rtentry_to_fib_config(int cmd, struct rtentry *rt,
|
||||
/*
|
||||
* Handle IP routing ioctl calls. These are used to manipulate the routing tables
|
||||
*/
|
||||
|
||||
|
||||
int ip_rt_ioctl(unsigned int cmd, void __user *arg)
|
||||
{
|
||||
struct fib_config cfg;
|
||||
@@ -600,7 +600,7 @@ int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
goto next;
|
||||
if (dumped)
|
||||
memset(&cb->args[2], 0, sizeof(cb->args) -
|
||||
2 * sizeof(cb->args[0]));
|
||||
2 * sizeof(cb->args[0]));
|
||||
if (tb->tb_dump(tb, skb, cb) < 0)
|
||||
goto out;
|
||||
dumped = 1;
|
||||
@@ -766,7 +766,7 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa)
|
||||
|
||||
static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb )
|
||||
{
|
||||
|
||||
|
||||
struct fib_result res;
|
||||
struct flowi fl = { .mark = frn->fl_mark,
|
||||
.nl_u = { .ip4_u = { .daddr = frn->fl_addr,
|
||||
@@ -791,11 +791,11 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb )
|
||||
static void nl_fib_input(struct sock *sk, int len)
|
||||
{
|
||||
struct sk_buff *skb = NULL;
|
||||
struct nlmsghdr *nlh = NULL;
|
||||
struct nlmsghdr *nlh = NULL;
|
||||
struct fib_result_nl *frn;
|
||||
u32 pid;
|
||||
u32 pid;
|
||||
struct fib_table *tb;
|
||||
|
||||
|
||||
skb = skb_dequeue(&sk->sk_receive_queue);
|
||||
nlh = (struct nlmsghdr *)skb->data;
|
||||
if (skb->len < NLMSG_SPACE(0) || skb->len < nlh->nlmsg_len ||
|
||||
@@ -803,17 +803,17 @@ static void nl_fib_input(struct sock *sk, int len)
|
||||
kfree_skb(skb);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
frn = (struct fib_result_nl *) NLMSG_DATA(nlh);
|
||||
tb = fib_get_table(frn->tb_id_in);
|
||||
|
||||
nl_fib_lookup(frn, tb);
|
||||
|
||||
|
||||
pid = nlh->nlmsg_pid; /*pid of sending process */
|
||||
NETLINK_CB(skb).pid = 0; /* from kernel */
|
||||
NETLINK_CB(skb).dst_group = 0; /* unicast */
|
||||
netlink_unicast(sk, skb, pid, MSG_DONTWAIT);
|
||||
}
|
||||
}
|
||||
|
||||
static void nl_fib_lookup_init(void)
|
||||
{
|
||||
|
||||
+5
-5
@@ -146,7 +146,7 @@ static void fn_rehash_zone(struct fn_zone *fz)
|
||||
struct hlist_head *ht, *old_ht;
|
||||
int old_divisor, new_divisor;
|
||||
u32 new_hashmask;
|
||||
|
||||
|
||||
old_divisor = fz->fz_divisor;
|
||||
|
||||
switch (old_divisor) {
|
||||
@@ -911,7 +911,7 @@ static struct fib_alias *fib_get_next(struct seq_file *seq)
|
||||
|
||||
if (!iter->zone)
|
||||
goto out;
|
||||
|
||||
|
||||
iter->bucket = 0;
|
||||
iter->hash_head = iter->zone->fz_hash;
|
||||
|
||||
@@ -932,7 +932,7 @@ static struct fib_alias *fib_get_idx(struct seq_file *seq, loff_t pos)
|
||||
{
|
||||
struct fib_iter_state *iter = seq->private;
|
||||
struct fib_alias *fa;
|
||||
|
||||
|
||||
if (iter->valid && pos >= iter->pos && iter->genid == fib_hash_genid) {
|
||||
fa = iter->fa;
|
||||
pos -= iter->pos;
|
||||
@@ -981,7 +981,7 @@ static unsigned fib_flag_trans(int type, __be32 mask, struct fib_info *fi)
|
||||
return flags;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* This outputs /proc/net/route.
|
||||
*
|
||||
* It always works in backward compatibility mode.
|
||||
@@ -1040,7 +1040,7 @@ static int fib_seq_open(struct inode *inode, struct file *file)
|
||||
struct seq_file *seq;
|
||||
int rc = -ENOMEM;
|
||||
struct fib_iter_state *s = kzalloc(sizeof(*s), GFP_KERNEL);
|
||||
|
||||
|
||||
if (!s)
|
||||
goto out;
|
||||
|
||||
|
||||
@@ -85,12 +85,12 @@ for (nhsel=0; nhsel < 1; nhsel++)
|
||||
#define endfor_nexthops(fi) }
|
||||
|
||||
|
||||
static const struct
|
||||
static const struct
|
||||
{
|
||||
int error;
|
||||
u8 scope;
|
||||
} fib_props[RTA_MAX + 1] = {
|
||||
{
|
||||
{
|
||||
.error = 0,
|
||||
.scope = RT_SCOPE_NOWHERE,
|
||||
}, /* RTN_UNSPEC */
|
||||
@@ -439,7 +439,7 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi)
|
||||
|
||||
rtnh = cfg->fc_mp;
|
||||
remaining = cfg->fc_mp_len;
|
||||
|
||||
|
||||
for_nexthops(fi) {
|
||||
int attrlen;
|
||||
|
||||
@@ -508,9 +508,9 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi)
|
||||
Normally it looks as following.
|
||||
|
||||
{universe prefix} -> (gw, oif) [scope link]
|
||||
|
|
||||
|
|
||||
|-> {link prefix} -> (gw, oif) [scope local]
|
||||
|
|
||||
|
|
||||
|-> {local prefix} (terminal node)
|
||||
*/
|
||||
|
||||
@@ -864,7 +864,7 @@ err_inval:
|
||||
err = -EINVAL;
|
||||
|
||||
failure:
|
||||
if (fi) {
|
||||
if (fi) {
|
||||
fi->fib_dead = 1;
|
||||
free_fib_info(fi);
|
||||
}
|
||||
@@ -1049,7 +1049,7 @@ int fib_sync_down(__be32 local, struct net_device *dev, int force)
|
||||
{
|
||||
int ret = 0;
|
||||
int scope = RT_SCOPE_NOWHERE;
|
||||
|
||||
|
||||
if (force)
|
||||
scope = -1;
|
||||
|
||||
|
||||
+49
-49
@@ -7,13 +7,13 @@
|
||||
* Robert Olsson <robert.olsson@its.uu.se> Uppsala Universitet
|
||||
* & Swedish University of Agricultural Sciences.
|
||||
*
|
||||
* Jens Laas <jens.laas@data.slu.se> Swedish University of
|
||||
* Jens Laas <jens.laas@data.slu.se> Swedish University of
|
||||
* Agricultural Sciences.
|
||||
*
|
||||
*
|
||||
* Hans Liss <hans.liss@its.uu.se> Uppsala Universitet
|
||||
*
|
||||
* This work is based on the LPC-trie which is originally descibed in:
|
||||
*
|
||||
*
|
||||
* An experimental study of compression methods for dynamic tries
|
||||
* Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
|
||||
* http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
|
||||
@@ -224,34 +224,34 @@ static inline int tkey_mismatch(t_key a, int offset, t_key b)
|
||||
}
|
||||
|
||||
/*
|
||||
To understand this stuff, an understanding of keys and all their bits is
|
||||
necessary. Every node in the trie has a key associated with it, but not
|
||||
To understand this stuff, an understanding of keys and all their bits is
|
||||
necessary. Every node in the trie has a key associated with it, but not
|
||||
all of the bits in that key are significant.
|
||||
|
||||
Consider a node 'n' and its parent 'tp'.
|
||||
|
||||
If n is a leaf, every bit in its key is significant. Its presence is
|
||||
necessitated by path compression, since during a tree traversal (when
|
||||
searching for a leaf - unless we are doing an insertion) we will completely
|
||||
ignore all skipped bits we encounter. Thus we need to verify, at the end of
|
||||
a potentially successful search, that we have indeed been walking the
|
||||
If n is a leaf, every bit in its key is significant. Its presence is
|
||||
necessitated by path compression, since during a tree traversal (when
|
||||
searching for a leaf - unless we are doing an insertion) we will completely
|
||||
ignore all skipped bits we encounter. Thus we need to verify, at the end of
|
||||
a potentially successful search, that we have indeed been walking the
|
||||
correct key path.
|
||||
|
||||
Note that we can never "miss" the correct key in the tree if present by
|
||||
following the wrong path. Path compression ensures that segments of the key
|
||||
that are the same for all keys with a given prefix are skipped, but the
|
||||
skipped part *is* identical for each node in the subtrie below the skipped
|
||||
bit! trie_insert() in this implementation takes care of that - note the
|
||||
Note that we can never "miss" the correct key in the tree if present by
|
||||
following the wrong path. Path compression ensures that segments of the key
|
||||
that are the same for all keys with a given prefix are skipped, but the
|
||||
skipped part *is* identical for each node in the subtrie below the skipped
|
||||
bit! trie_insert() in this implementation takes care of that - note the
|
||||
call to tkey_sub_equals() in trie_insert().
|
||||
|
||||
if n is an internal node - a 'tnode' here, the various parts of its key
|
||||
if n is an internal node - a 'tnode' here, the various parts of its key
|
||||
have many different meanings.
|
||||
|
||||
Example:
|
||||
Example:
|
||||
_________________________________________________________________
|
||||
| i | i | i | i | i | i | i | N | N | N | S | S | S | S | S | C |
|
||||
-----------------------------------------------------------------
|
||||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
|
||||
_________________________________________________________________
|
||||
| C | C | C | u | u | u | u | u | u | u | u | u | u | u | u | u |
|
||||
@@ -263,23 +263,23 @@ static inline int tkey_mismatch(t_key a, int offset, t_key b)
|
||||
n->pos = 15
|
||||
n->bits = 4
|
||||
|
||||
First, let's just ignore the bits that come before the parent tp, that is
|
||||
the bits from 0 to (tp->pos-1). They are *known* but at this point we do
|
||||
First, let's just ignore the bits that come before the parent tp, that is
|
||||
the bits from 0 to (tp->pos-1). They are *known* but at this point we do
|
||||
not use them for anything.
|
||||
|
||||
The bits from (tp->pos) to (tp->pos + tp->bits - 1) - "N", above - are the
|
||||
index into the parent's child array. That is, they will be used to find
|
||||
index into the parent's child array. That is, they will be used to find
|
||||
'n' among tp's children.
|
||||
|
||||
The bits from (tp->pos + tp->bits) to (n->pos - 1) - "S" - are skipped bits
|
||||
for the node n.
|
||||
|
||||
All the bits we have seen so far are significant to the node n. The rest
|
||||
All the bits we have seen so far are significant to the node n. The rest
|
||||
of the bits are really not needed or indeed known in n->key.
|
||||
|
||||
The bits from (n->pos) to (n->pos + n->bits - 1) - "C" - are the index into
|
||||
The bits from (n->pos) to (n->pos + n->bits - 1) - "C" - are the index into
|
||||
n's child array, and will of course be different for each child.
|
||||
|
||||
|
||||
|
||||
The rest of the bits, from (n->pos + n->bits) onward, are completely unknown
|
||||
at this point.
|
||||
@@ -294,7 +294,7 @@ static inline void check_tnode(const struct tnode *tn)
|
||||
static int halve_threshold = 25;
|
||||
static int inflate_threshold = 50;
|
||||
static int halve_threshold_root = 15;
|
||||
static int inflate_threshold_root = 25;
|
||||
static int inflate_threshold_root = 25;
|
||||
|
||||
|
||||
static void __alias_free_mem(struct rcu_head *head)
|
||||
@@ -355,7 +355,7 @@ static inline void tnode_free(struct tnode *tn)
|
||||
struct leaf *l = (struct leaf *) tn;
|
||||
call_rcu_bh(&l->rcu, __leaf_free_rcu);
|
||||
}
|
||||
else
|
||||
else
|
||||
call_rcu(&tn->rcu, __tnode_free_rcu);
|
||||
}
|
||||
|
||||
@@ -461,7 +461,7 @@ static struct node *resize(struct trie *t, struct tnode *tn)
|
||||
int inflate_threshold_use;
|
||||
int halve_threshold_use;
|
||||
|
||||
if (!tn)
|
||||
if (!tn)
|
||||
return NULL;
|
||||
|
||||
pr_debug("In tnode_resize %p inflate_threshold=%d threshold=%d\n",
|
||||
@@ -556,7 +556,7 @@ static struct node *resize(struct trie *t, struct tnode *tn)
|
||||
|
||||
if(!tn->parent)
|
||||
inflate_threshold_use = inflate_threshold_root;
|
||||
else
|
||||
else
|
||||
inflate_threshold_use = inflate_threshold;
|
||||
|
||||
err = 0;
|
||||
@@ -587,7 +587,7 @@ static struct node *resize(struct trie *t, struct tnode *tn)
|
||||
|
||||
if(!tn->parent)
|
||||
halve_threshold_use = halve_threshold_root;
|
||||
else
|
||||
else
|
||||
halve_threshold_use = halve_threshold;
|
||||
|
||||
err = 0;
|
||||
@@ -665,10 +665,10 @@ static struct tnode *inflate(struct trie *t, struct tnode *tn)
|
||||
right = tnode_new(inode->key|m, inode->pos + 1,
|
||||
inode->bits - 1);
|
||||
|
||||
if (!right) {
|
||||
if (!right) {
|
||||
tnode_free(left);
|
||||
goto nomem;
|
||||
}
|
||||
}
|
||||
|
||||
put_child(t, tn, 2*i, (struct node *) left);
|
||||
put_child(t, tn, 2*i+1, (struct node *) right);
|
||||
@@ -890,23 +890,23 @@ static inline struct list_head * get_fa_head(struct leaf *l, int plen)
|
||||
|
||||
static void insert_leaf_info(struct hlist_head *head, struct leaf_info *new)
|
||||
{
|
||||
struct leaf_info *li = NULL, *last = NULL;
|
||||
struct hlist_node *node;
|
||||
struct leaf_info *li = NULL, *last = NULL;
|
||||
struct hlist_node *node;
|
||||
|
||||
if (hlist_empty(head)) {
|
||||
hlist_add_head_rcu(&new->hlist, head);
|
||||
} else {
|
||||
hlist_for_each_entry(li, node, head, hlist) {
|
||||
if (new->plen > li->plen)
|
||||
break;
|
||||
if (hlist_empty(head)) {
|
||||
hlist_add_head_rcu(&new->hlist, head);
|
||||
} else {
|
||||
hlist_for_each_entry(li, node, head, hlist) {
|
||||
if (new->plen > li->plen)
|
||||
break;
|
||||
|
||||
last = li;
|
||||
}
|
||||
if (last)
|
||||
hlist_add_after_rcu(&last->hlist, &new->hlist);
|
||||
else
|
||||
hlist_add_before_rcu(&new->hlist, &li->hlist);
|
||||
}
|
||||
last = li;
|
||||
}
|
||||
if (last)
|
||||
hlist_add_after_rcu(&last->hlist, &new->hlist);
|
||||
else
|
||||
hlist_add_before_rcu(&new->hlist, &li->hlist);
|
||||
}
|
||||
}
|
||||
|
||||
/* rcu_read_lock needs to be hold by caller from readside */
|
||||
@@ -1700,7 +1700,7 @@ static struct leaf *nextleaf(struct trie *t, struct leaf *thisleaf)
|
||||
/* Decend if tnode */
|
||||
while (IS_TNODE(c)) {
|
||||
p = (struct tnode *) c;
|
||||
idx = 0;
|
||||
idx = 0;
|
||||
|
||||
/* Rightmost non-NULL branch */
|
||||
if (p && IS_TNODE(p))
|
||||
@@ -2303,9 +2303,9 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v)
|
||||
|
||||
seq_indent(seq, iter->depth-1);
|
||||
seq_printf(seq, " +-- %d.%d.%d.%d/%d %d %d %d\n",
|
||||
NIPQUAD(prf), tn->pos, tn->bits, tn->full_children,
|
||||
NIPQUAD(prf), tn->pos, tn->bits, tn->full_children,
|
||||
tn->empty_children);
|
||||
|
||||
|
||||
} else {
|
||||
struct leaf *l = (struct leaf *) n;
|
||||
int i;
|
||||
|
||||
+8
-8
@@ -304,7 +304,7 @@ static inline int icmpv4_xrlim_allow(struct rtable *rt, int type, int code)
|
||||
|
||||
/* No rate limit on loopback */
|
||||
if (dst->dev && (dst->dev->flags&IFF_LOOPBACK))
|
||||
goto out;
|
||||
goto out;
|
||||
|
||||
/* Limit if icmp type is enabled in ratemask. */
|
||||
if ((1 << type) & sysctl_icmp_ratemask)
|
||||
@@ -350,9 +350,9 @@ static void icmp_push_reply(struct icmp_bxm *icmp_param,
|
||||
struct sk_buff *skb;
|
||||
|
||||
if (ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param,
|
||||
icmp_param->data_len+icmp_param->head_len,
|
||||
icmp_param->head_len,
|
||||
ipc, rt, MSG_DONTWAIT) < 0)
|
||||
icmp_param->data_len+icmp_param->head_len,
|
||||
icmp_param->head_len,
|
||||
ipc, rt, MSG_DONTWAIT) < 0)
|
||||
ip_flush_pending_frames(icmp_socket->sk);
|
||||
else if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) {
|
||||
struct icmphdr *icmph = skb->h.icmph;
|
||||
@@ -755,7 +755,7 @@ static void icmp_redirect(struct sk_buff *skb)
|
||||
skb->h.icmph->un.gateway,
|
||||
iph->saddr, skb->dev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
out:
|
||||
return;
|
||||
out_err:
|
||||
@@ -959,7 +959,7 @@ int icmp_rcv(struct sk_buff *skb)
|
||||
* Parse the ICMP message
|
||||
*/
|
||||
|
||||
if (rt->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) {
|
||||
if (rt->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST)) {
|
||||
/*
|
||||
* RFC 1122: 3.2.2.6 An ICMP_ECHO to broadcast MAY be
|
||||
* silently ignored (we let user decide with a sysctl).
|
||||
@@ -976,7 +976,7 @@ int icmp_rcv(struct sk_buff *skb)
|
||||
icmph->type != ICMP_ADDRESS &&
|
||||
icmph->type != ICMP_ADDRESSREPLY) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ICMP_INC_STATS_BH(icmp_pointers[icmph->type].input_entry);
|
||||
@@ -1085,7 +1085,7 @@ static const struct icmp_control icmp_pointers[NR_ICMP_TYPES + 1] = {
|
||||
.input_entry = ICMP_MIB_DUMMY,
|
||||
.handler = icmp_discard,
|
||||
},
|
||||
[ICMP_INFO_REPLY] = {
|
||||
[ICMP_INFO_REPLY] = {
|
||||
.output_entry = ICMP_MIB_DUMMY,
|
||||
.input_entry = ICMP_MIB_DUMMY,
|
||||
.handler = icmp_discard,
|
||||
|
||||
+23
-23
@@ -35,7 +35,7 @@
|
||||
*
|
||||
* Chih-Jen Chang : Tried to revise IGMP to Version 2
|
||||
* Tsu-Sheng Tsao E-mail: chihjenc@scf.usc.edu and tsusheng@scf.usc.edu
|
||||
* The enhancements are mainly based on Steve Deering's
|
||||
* The enhancements are mainly based on Steve Deering's
|
||||
* ipmulti-3.5 source code.
|
||||
* Chih-Jen Chang : Added the igmp_get_mrouter_info and
|
||||
* Tsu-Sheng Tsao igmp_set_mrouter_info to keep track of
|
||||
@@ -49,11 +49,11 @@
|
||||
* Alan Cox : Stop IGMP from 0.0.0.0 being accepted.
|
||||
* Alan Cox : Use GFP_ATOMIC in the right places.
|
||||
* Christian Daudt : igmp timer wasn't set for local group
|
||||
* memberships but was being deleted,
|
||||
* which caused a "del_timer() called
|
||||
* memberships but was being deleted,
|
||||
* which caused a "del_timer() called
|
||||
* from %p with timer not initialized\n"
|
||||
* message (960131).
|
||||
* Christian Daudt : removed del_timer from
|
||||
* Christian Daudt : removed del_timer from
|
||||
* igmp_timer_expire function (960205).
|
||||
* Christian Daudt : igmp_heard_report now only calls
|
||||
* igmp_timer_expire if tm->running is
|
||||
@@ -718,7 +718,7 @@ static void igmp_ifc_event(struct in_device *in_dev)
|
||||
{
|
||||
if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev))
|
||||
return;
|
||||
in_dev->mr_ifc_count = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
in_dev->mr_ifc_count = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
IGMP_Unsolicited_Report_Count;
|
||||
igmp_ifc_start_timer(in_dev, 1);
|
||||
}
|
||||
@@ -838,7 +838,7 @@ static void igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,
|
||||
if (len == 8) {
|
||||
if (ih->code == 0) {
|
||||
/* Alas, old v1 router presents here. */
|
||||
|
||||
|
||||
max_delay = IGMP_Query_Response_Interval;
|
||||
in_dev->mr_v1_seen = jiffies +
|
||||
IGMP_V1_Router_Present_Timeout;
|
||||
@@ -860,10 +860,10 @@ static void igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,
|
||||
} else { /* v3 */
|
||||
if (!pskb_may_pull(skb, sizeof(struct igmpv3_query)))
|
||||
return;
|
||||
|
||||
|
||||
ih3 = (struct igmpv3_query *) skb->h.raw;
|
||||
if (ih3->nsrcs) {
|
||||
if (!pskb_may_pull(skb, sizeof(struct igmpv3_query)
|
||||
if (!pskb_may_pull(skb, sizeof(struct igmpv3_query)
|
||||
+ ntohs(ih3->nsrcs)*sizeof(__be32)))
|
||||
return;
|
||||
ih3 = (struct igmpv3_query *) skb->h.raw;
|
||||
@@ -909,7 +909,7 @@ static void igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,
|
||||
else
|
||||
im->gsquery = mark;
|
||||
changed = !im->gsquery ||
|
||||
igmp_marksources(im, ntohs(ih3->nsrcs), ih3->srcs);
|
||||
igmp_marksources(im, ntohs(ih3->nsrcs), ih3->srcs);
|
||||
spin_unlock_bh(&im->lock);
|
||||
if (changed)
|
||||
igmp_mod_timer(im, max_delay);
|
||||
@@ -1257,9 +1257,9 @@ out:
|
||||
void ip_mc_dec_group(struct in_device *in_dev, __be32 addr)
|
||||
{
|
||||
struct ip_mc_list *i, **ip;
|
||||
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
|
||||
for (ip=&in_dev->mc_list; (i=*ip)!=NULL; ip=&i->next) {
|
||||
if (i->multiaddr==addr) {
|
||||
if (--i->users == 0) {
|
||||
@@ -1436,7 +1436,7 @@ static int ip_mc_del1_src(struct ip_mc_list *pmc, int sfmode,
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
if (psf->sf_oldin &&
|
||||
!IGMP_V1_SEEN(in_dev) && !IGMP_V2_SEEN(in_dev)) {
|
||||
psf->sf_crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
psf->sf_crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
IGMP_Unsolicited_Report_Count;
|
||||
psf->sf_next = pmc->tomb;
|
||||
pmc->tomb = psf;
|
||||
@@ -1500,7 +1500,7 @@ static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
|
||||
/* filter mode change */
|
||||
pmc->sfmode = MCAST_INCLUDE;
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
IGMP_Unsolicited_Report_Count;
|
||||
in_dev->mr_ifc_count = pmc->crcount;
|
||||
for (psf=pmc->sources; psf; psf = psf->sf_next)
|
||||
@@ -1679,7 +1679,7 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
/* else no filters; keep old mode for reports */
|
||||
|
||||
pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv :
|
||||
IGMP_Unsolicited_Report_Count;
|
||||
in_dev->mr_ifc_count = pmc->crcount;
|
||||
for (psf=pmc->sources; psf; psf = psf->sf_next)
|
||||
@@ -1873,7 +1873,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
|
||||
} else if (pmc->sfmode != omode) {
|
||||
/* allow mode switches for empty-set filters */
|
||||
ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 0, NULL, 0);
|
||||
ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, pmc->sfmode, 0,
|
||||
ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, pmc->sfmode, 0,
|
||||
NULL, 0);
|
||||
pmc->sfmode = omode;
|
||||
}
|
||||
@@ -1899,7 +1899,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
|
||||
}
|
||||
|
||||
/* update the interface filter */
|
||||
ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, omode, 1,
|
||||
ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, omode, 1,
|
||||
&mreqs->imr_sourceaddr, 1);
|
||||
|
||||
for (j=i+1; j<psl->sl_count; j++)
|
||||
@@ -1949,7 +1949,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
|
||||
psl->sl_count++;
|
||||
err = 0;
|
||||
/* update the interface list */
|
||||
ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 1,
|
||||
ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 1,
|
||||
&mreqs->imr_sourceaddr, 1);
|
||||
done:
|
||||
rtnl_unlock();
|
||||
@@ -2264,7 +2264,7 @@ static inline struct ip_mc_list *igmp_mc_get_first(struct seq_file *seq)
|
||||
struct igmp_mc_iter_state *state = igmp_mc_seq_private(seq);
|
||||
|
||||
for (state->dev = dev_base, state->in_dev = NULL;
|
||||
state->dev;
|
||||
state->dev;
|
||||
state->dev = state->dev->next) {
|
||||
struct in_device *in_dev;
|
||||
in_dev = in_dev_get(state->dev);
|
||||
@@ -2346,7 +2346,7 @@ static void igmp_mc_seq_stop(struct seq_file *seq, void *v)
|
||||
static int igmp_mc_seq_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
if (v == SEQ_START_TOKEN)
|
||||
seq_puts(seq,
|
||||
seq_puts(seq,
|
||||
"Idx\tDevice : Count Querier\tGroup Users Timer\tReporter\n");
|
||||
else {
|
||||
struct ip_mc_list *im = (struct ip_mc_list *)v;
|
||||
@@ -2426,7 +2426,7 @@ static inline struct ip_sf_list *igmp_mcf_get_first(struct seq_file *seq)
|
||||
struct igmp_mcf_iter_state *state = igmp_mcf_seq_private(seq);
|
||||
|
||||
for (state->dev = dev_base, state->idev = NULL, state->im = NULL;
|
||||
state->dev;
|
||||
state->dev;
|
||||
state->dev = state->dev->next) {
|
||||
struct in_device *idev;
|
||||
idev = in_dev_get(state->dev);
|
||||
@@ -2531,7 +2531,7 @@ static int igmp_mcf_seq_show(struct seq_file *seq, void *v)
|
||||
struct igmp_mcf_iter_state *state = igmp_mcf_seq_private(seq);
|
||||
|
||||
if (v == SEQ_START_TOKEN) {
|
||||
seq_printf(seq,
|
||||
seq_printf(seq,
|
||||
"%3s %6s "
|
||||
"%10s %10s %6s %6s\n", "Idx",
|
||||
"Device", "MCA",
|
||||
@@ -2539,8 +2539,8 @@ static int igmp_mcf_seq_show(struct seq_file *seq, void *v)
|
||||
} else {
|
||||
seq_printf(seq,
|
||||
"%3d %6.6s 0x%08x "
|
||||
"0x%08x %6lu %6lu\n",
|
||||
state->dev->ifindex, state->dev->name,
|
||||
"0x%08x %6lu %6lu\n",
|
||||
state->dev->ifindex, state->dev->name,
|
||||
ntohl(state->im->multiaddr),
|
||||
ntohl(psf->sf_inaddr),
|
||||
psf->sf_count[MCAST_INCLUDE],
|
||||
|
||||
@@ -149,7 +149,7 @@ success:
|
||||
if (!inet_csk(sk)->icsk_bind_hash)
|
||||
inet_bind_hash(sk, tb, snum);
|
||||
BUG_TRAP(inet_csk(sk)->icsk_bind_hash == tb);
|
||||
ret = 0;
|
||||
ret = 0;
|
||||
|
||||
fail_unlock:
|
||||
spin_unlock(&head->lock);
|
||||
@@ -255,7 +255,7 @@ EXPORT_SYMBOL(inet_csk_accept);
|
||||
|
||||
/*
|
||||
* Using different timers for retransmit, delayed acks and probes
|
||||
* We may wish use just one timer maintaining a list of expire jiffies
|
||||
* We may wish use just one timer maintaining a list of expire jiffies
|
||||
* to optimize.
|
||||
*/
|
||||
void inet_csk_init_xmit_timers(struct sock *sk,
|
||||
@@ -273,7 +273,7 @@ void inet_csk_init_xmit_timers(struct sock *sk,
|
||||
icsk->icsk_delack_timer.function = delack_handler;
|
||||
sk->sk_timer.function = keepalive_handler;
|
||||
|
||||
icsk->icsk_retransmit_timer.data =
|
||||
icsk->icsk_retransmit_timer.data =
|
||||
icsk->icsk_delack_timer.data =
|
||||
sk->sk_timer.data = (unsigned long)sk;
|
||||
|
||||
|
||||
@@ -381,7 +381,7 @@ static int inet_diag_bc_run(const void *bc, int len,
|
||||
if (addr[0] == 0 && addr[1] == 0 &&
|
||||
addr[2] == htonl(0xffff) &&
|
||||
bitstring_match(addr + 3, cond->addr,
|
||||
cond->prefix_len))
|
||||
cond->prefix_len))
|
||||
break;
|
||||
}
|
||||
yes = 0;
|
||||
@@ -518,7 +518,7 @@ static int inet_twsk_diag_dump(struct inet_timewait_sock *tw,
|
||||
}
|
||||
entry.sport = tw->tw_num;
|
||||
entry.dport = ntohs(tw->tw_dport);
|
||||
entry.userlocks = 0;
|
||||
entry.userlocks = 0;
|
||||
|
||||
if (!inet_diag_bc_run(RTA_DATA(bc), RTA_PAYLOAD(bc), &entry))
|
||||
return 0;
|
||||
|
||||
+49
-49
@@ -262,7 +262,7 @@ not_unique:
|
||||
static inline u32 inet_sk_port_offset(const struct sock *sk)
|
||||
{
|
||||
const struct inet_sock *inet = inet_sk(sk);
|
||||
return secure_ipv4_port_ephemeral(inet->rcv_saddr, inet->daddr,
|
||||
return secure_ipv4_port_ephemeral(inet->rcv_saddr, inet->daddr,
|
||||
inet->dport);
|
||||
}
|
||||
|
||||
@@ -274,81 +274,81 @@ int inet_hash_connect(struct inet_timewait_death_row *death_row,
|
||||
{
|
||||
struct inet_hashinfo *hinfo = death_row->hashinfo;
|
||||
const unsigned short snum = inet_sk(sk)->num;
|
||||
struct inet_bind_hashbucket *head;
|
||||
struct inet_bind_bucket *tb;
|
||||
struct inet_bind_hashbucket *head;
|
||||
struct inet_bind_bucket *tb;
|
||||
int ret;
|
||||
|
||||
if (!snum) {
|
||||
int low = sysctl_local_port_range[0];
|
||||
int high = sysctl_local_port_range[1];
|
||||
if (!snum) {
|
||||
int low = sysctl_local_port_range[0];
|
||||
int high = sysctl_local_port_range[1];
|
||||
int range = high - low;
|
||||
int i;
|
||||
int i;
|
||||
int port;
|
||||
static u32 hint;
|
||||
u32 offset = hint + inet_sk_port_offset(sk);
|
||||
struct hlist_node *node;
|
||||
struct inet_timewait_sock *tw = NULL;
|
||||
struct inet_timewait_sock *tw = NULL;
|
||||
|
||||
local_bh_disable();
|
||||
local_bh_disable();
|
||||
for (i = 1; i <= range; i++) {
|
||||
port = low + (i + offset) % range;
|
||||
head = &hinfo->bhash[inet_bhashfn(port, hinfo->bhash_size)];
|
||||
spin_lock(&head->lock);
|
||||
head = &hinfo->bhash[inet_bhashfn(port, hinfo->bhash_size)];
|
||||
spin_lock(&head->lock);
|
||||
|
||||
/* Does not bother with rcv_saddr checks,
|
||||
* because the established check is already
|
||||
* unique enough.
|
||||
*/
|
||||
/* Does not bother with rcv_saddr checks,
|
||||
* because the established check is already
|
||||
* unique enough.
|
||||
*/
|
||||
inet_bind_bucket_for_each(tb, node, &head->chain) {
|
||||
if (tb->port == port) {
|
||||
BUG_TRAP(!hlist_empty(&tb->owners));
|
||||
if (tb->fastreuse >= 0)
|
||||
goto next_port;
|
||||
if (!__inet_check_established(death_row,
|
||||
if (tb->port == port) {
|
||||
BUG_TRAP(!hlist_empty(&tb->owners));
|
||||
if (tb->fastreuse >= 0)
|
||||
goto next_port;
|
||||
if (!__inet_check_established(death_row,
|
||||
sk, port,
|
||||
&tw))
|
||||
goto ok;
|
||||
goto next_port;
|
||||
}
|
||||
}
|
||||
goto ok;
|
||||
goto next_port;
|
||||
}
|
||||
}
|
||||
|
||||
tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep, head, port);
|
||||
if (!tb) {
|
||||
spin_unlock(&head->lock);
|
||||
break;
|
||||
}
|
||||
tb->fastreuse = -1;
|
||||
goto ok;
|
||||
tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep, head, port);
|
||||
if (!tb) {
|
||||
spin_unlock(&head->lock);
|
||||
break;
|
||||
}
|
||||
tb->fastreuse = -1;
|
||||
goto ok;
|
||||
|
||||
next_port:
|
||||
spin_unlock(&head->lock);
|
||||
}
|
||||
local_bh_enable();
|
||||
next_port:
|
||||
spin_unlock(&head->lock);
|
||||
}
|
||||
local_bh_enable();
|
||||
|
||||
return -EADDRNOTAVAIL;
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
ok:
|
||||
hint += i;
|
||||
|
||||
/* Head lock still held and bh's disabled */
|
||||
inet_bind_hash(sk, tb, port);
|
||||
/* Head lock still held and bh's disabled */
|
||||
inet_bind_hash(sk, tb, port);
|
||||
if (sk_unhashed(sk)) {
|
||||
inet_sk(sk)->sport = htons(port);
|
||||
__inet_hash(hinfo, sk, 0);
|
||||
}
|
||||
spin_unlock(&head->lock);
|
||||
inet_sk(sk)->sport = htons(port);
|
||||
__inet_hash(hinfo, sk, 0);
|
||||
}
|
||||
spin_unlock(&head->lock);
|
||||
|
||||
if (tw) {
|
||||
inet_twsk_deschedule(tw, death_row);
|
||||
inet_twsk_put(tw);
|
||||
}
|
||||
if (tw) {
|
||||
inet_twsk_deschedule(tw, death_row);
|
||||
inet_twsk_put(tw);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
head = &hinfo->bhash[inet_bhashfn(snum, hinfo->bhash_size)];
|
||||
tb = inet_csk(sk)->icsk_bind_hash;
|
||||
head = &hinfo->bhash[inet_bhashfn(snum, hinfo->bhash_size)];
|
||||
tb = inet_csk(sk)->icsk_bind_hash;
|
||||
spin_lock_bh(&head->lock);
|
||||
if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) {
|
||||
__inet_hash(hinfo, sk, 0);
|
||||
|
||||
+11
-11
@@ -4,15 +4,15 @@
|
||||
* interface as the means of communication with the user level.
|
||||
*
|
||||
* The IP forwarding functionality.
|
||||
*
|
||||
*
|
||||
* Version: $Id: ip_forward.c,v 1.48 2000/12/13 18:31:48 davem Exp $
|
||||
*
|
||||
* Authors: see ip.c
|
||||
*
|
||||
* Fixes:
|
||||
* Many : Split from ip.c , see ip_input.c for
|
||||
* Many : Split from ip.c , see ip_input.c for
|
||||
* history.
|
||||
* Dave Gregorich : NULL ip_rt_put fix for multicast
|
||||
* Dave Gregorich : NULL ip_rt_put fix for multicast
|
||||
* routing.
|
||||
* Jos Vos : Add call_out_firewall before sending,
|
||||
* use output device for accounting.
|
||||
@@ -69,14 +69,14 @@ int ip_forward(struct sk_buff *skb)
|
||||
goto drop;
|
||||
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
|
||||
/*
|
||||
* According to the RFC, we must first decrease the TTL field. If
|
||||
* that reaches zero, we must reply an ICMP control message telling
|
||||
* that the packet's lifetime expired.
|
||||
*/
|
||||
if (skb->nh.iph->ttl <= 1)
|
||||
goto too_many_hops;
|
||||
goto too_many_hops;
|
||||
|
||||
if (!xfrm4_route_forward(skb))
|
||||
goto drop;
|
||||
@@ -107,16 +107,16 @@ int ip_forward(struct sk_buff *skb)
|
||||
ip_forward_finish);
|
||||
|
||||
sr_failed:
|
||||
/*
|
||||
/*
|
||||
* Strict routing permits no gatewaying
|
||||
*/
|
||||
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_SR_FAILED, 0);
|
||||
goto drop;
|
||||
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_SR_FAILED, 0);
|
||||
goto drop;
|
||||
|
||||
too_many_hops:
|
||||
/* Tell the sender its packet died... */
|
||||
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
|
||||
icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
|
||||
/* Tell the sender its packet died... */
|
||||
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
|
||||
icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
|
||||
drop:
|
||||
kfree_skb(skb);
|
||||
return NET_RX_DROP;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* interface as the means of communication with the user level.
|
||||
*
|
||||
* The IP fragmentation functionality.
|
||||
*
|
||||
*
|
||||
* Version: $Id: ip_fragment.c,v 1.59 2002/01/12 07:54:56 davem Exp $
|
||||
*
|
||||
* Authors: Fred N. van Kempen <waltje@uWalt.NL.Mugnet.ORG>
|
||||
@@ -238,7 +238,7 @@ static void ipq_kill(struct ipq *ipq)
|
||||
}
|
||||
}
|
||||
|
||||
/* Memory limiting on fragments. Evictor trashes the oldest
|
||||
/* Memory limiting on fragments. Evictor trashes the oldest
|
||||
* fragment queue until we are back under the threshold.
|
||||
*/
|
||||
static void ip_evictor(void)
|
||||
@@ -479,14 +479,14 @@ static void ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
|
||||
goto err;
|
||||
}
|
||||
|
||||
offset = ntohs(skb->nh.iph->frag_off);
|
||||
offset = ntohs(skb->nh.iph->frag_off);
|
||||
flags = offset & ~IP_OFFSET;
|
||||
offset &= IP_OFFSET;
|
||||
offset <<= 3; /* offset is in 8-byte chunks */
|
||||
ihl = skb->nh.iph->ihl * 4;
|
||||
ihl = skb->nh.iph->ihl * 4;
|
||||
|
||||
/* Determine the position of this fragment. */
|
||||
end = offset + skb->len - ihl;
|
||||
end = offset + skb->len - ihl;
|
||||
|
||||
/* Is this the final fragment? */
|
||||
if ((flags & IP_MF) == 0) {
|
||||
@@ -589,8 +589,8 @@ static void ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
|
||||
else
|
||||
qp->fragments = skb;
|
||||
|
||||
if (skb->dev)
|
||||
qp->iif = skb->dev->ifindex;
|
||||
if (skb->dev)
|
||||
qp->iif = skb->dev->ifindex;
|
||||
skb->dev = NULL;
|
||||
skb_get_timestamp(skb, &qp->stamp);
|
||||
qp->meat += skb->len;
|
||||
@@ -684,7 +684,7 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev)
|
||||
return head;
|
||||
|
||||
out_nomem:
|
||||
LIMIT_NETDEBUG(KERN_ERR "IP: queue_glue: no memory for gluing "
|
||||
LIMIT_NETDEBUG(KERN_ERR "IP: queue_glue: no memory for gluing "
|
||||
"queue %p\n", qp);
|
||||
goto out_fail;
|
||||
out_oversize:
|
||||
@@ -703,7 +703,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb, u32 user)
|
||||
struct iphdr *iph = skb->nh.iph;
|
||||
struct ipq *qp;
|
||||
struct net_device *dev;
|
||||
|
||||
|
||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS);
|
||||
|
||||
/* Start by cleaning up the memory. */
|
||||
|
||||
+8
-8
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Linux NET3: GRE over IP protocol decoder.
|
||||
* Linux NET3: GRE over IP protocol decoder.
|
||||
*
|
||||
* Authors: Alexey Kuznetsov (kuznet@ms2.inr.ac.ru)
|
||||
*
|
||||
@@ -63,7 +63,7 @@
|
||||
solution, but it supposes maintaing new variable in ALL
|
||||
skb, even if no tunneling is used.
|
||||
|
||||
Current solution: t->recursion lock breaks dead loops. It looks
|
||||
Current solution: t->recursion lock breaks dead loops. It looks
|
||||
like dev->tbusy flag, but I preferred new variable, because
|
||||
the semantics is different. One day, when hard_start_xmit
|
||||
will be multithreaded we will have to use skb->encapsulation.
|
||||
@@ -613,7 +613,7 @@ static int ipgre_rcv(struct sk_buff *skb)
|
||||
if (flags == 0 &&
|
||||
skb->protocol == htons(ETH_P_WCCP)) {
|
||||
skb->protocol = htons(ETH_P_IP);
|
||||
if ((*(h + offset) & 0xF0) != 0x40)
|
||||
if ((*(h + offset) & 0xF0) != 0x40)
|
||||
offset += 4;
|
||||
}
|
||||
|
||||
@@ -816,7 +816,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom);
|
||||
if (!new_skb) {
|
||||
ip_rt_put(rt);
|
||||
stats->tx_dropped++;
|
||||
stats->tx_dropped++;
|
||||
dev_kfree_skb(skb);
|
||||
tunnel->recursion--;
|
||||
return 0;
|
||||
@@ -1044,7 +1044,7 @@ static int ipgre_tunnel_change_mtu(struct net_device *dev, int new_mtu)
|
||||
so that I had to set ARPHRD_IPGRE to a random value.
|
||||
I have an impression, that Cisco could make something similar,
|
||||
but this feature is apparently missing in IOS<=11.2(8).
|
||||
|
||||
|
||||
I set up 10.66.66/24 and fec0:6666:6666::0/96 as virtual networks
|
||||
with broadcast 224.66.66.66. If you have access to mbone, play with me :-)
|
||||
|
||||
@@ -1076,9 +1076,9 @@ static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned sh
|
||||
p[1] = htons(type);
|
||||
|
||||
/*
|
||||
* Set the source hardware address.
|
||||
* Set the source hardware address.
|
||||
*/
|
||||
|
||||
|
||||
if (saddr)
|
||||
memcpy(&iph->saddr, saddr, 4);
|
||||
|
||||
@@ -1088,7 +1088,7 @@ static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned sh
|
||||
}
|
||||
if (iph->daddr && !MULTICAST(iph->daddr))
|
||||
return t->hlen;
|
||||
|
||||
|
||||
return -t->hlen;
|
||||
}
|
||||
|
||||
|
||||
+14
-14
@@ -15,7 +15,7 @@
|
||||
* Stefan Becker, <stefanb@yello.ping.de>
|
||||
* Jorge Cwik, <jorge@laser.satlink.net>
|
||||
* Arnt Gulbrandsen, <agulbra@nvg.unit.no>
|
||||
*
|
||||
*
|
||||
*
|
||||
* Fixes:
|
||||
* Alan Cox : Commented a couple of minor bits of surplus code
|
||||
@@ -98,13 +98,13 @@
|
||||
* Jos Vos : Do accounting *before* call_in_firewall
|
||||
* Willy Konynenberg : Transparent proxying support
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* To Fix:
|
||||
* IP fragmentation wants rewriting cleanly. The RFC815 algorithm is much more efficient
|
||||
* and could be made very efficient with the addition of some virtual memory hacks to permit
|
||||
* the allocation of a buffer that can then be 'grown' by twiddling page tables.
|
||||
* Output fragmentation wants updating along with the buffer management to use a single
|
||||
* Output fragmentation wants updating along with the buffer management to use a single
|
||||
* interleaved copy algorithm so that fragmenting has a one copy overhead. Actual packet
|
||||
* output should probably do its own fragmentation at the UDP/RAW layer. TCP shouldn't cause
|
||||
* fragmentation anyway.
|
||||
@@ -154,7 +154,7 @@ DEFINE_SNMP_STAT(struct ipstats_mib, ip_statistics) __read_mostly;
|
||||
|
||||
/*
|
||||
* Process Router Attention IP option
|
||||
*/
|
||||
*/
|
||||
int ip_call_ra_chain(struct sk_buff *skb)
|
||||
{
|
||||
struct ip_ra_chain *ra;
|
||||
@@ -202,8 +202,8 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
|
||||
|
||||
__skb_pull(skb, ihl);
|
||||
|
||||
/* Point into the IP datagram, just past the header. */
|
||||
skb->h.raw = skb->data;
|
||||
/* Point into the IP datagram, just past the header. */
|
||||
skb->h.raw = skb->data;
|
||||
|
||||
rcu_read_lock();
|
||||
{
|
||||
@@ -259,7 +259,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
|
||||
|
||||
/*
|
||||
* Deliver IP Packets to the higher protocol layers.
|
||||
*/
|
||||
*/
|
||||
int ip_local_deliver(struct sk_buff *skb)
|
||||
{
|
||||
/*
|
||||
@@ -335,14 +335,14 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
|
||||
/*
|
||||
* Initialise the virtual path cache for the packet. It describes
|
||||
* how the packet travels inside Linux networking.
|
||||
*/
|
||||
*/
|
||||
if (skb->dst == NULL) {
|
||||
int err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos,
|
||||
skb->dev);
|
||||
if (unlikely(err)) {
|
||||
if (err == -EHOSTUNREACH)
|
||||
IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS);
|
||||
goto drop;
|
||||
goto drop;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,13 +363,13 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
|
||||
return dst_input(skb);
|
||||
|
||||
drop:
|
||||
kfree_skb(skb);
|
||||
return NET_RX_DROP;
|
||||
kfree_skb(skb);
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
|
||||
/*
|
||||
* Main IP Receive routine.
|
||||
*/
|
||||
*/
|
||||
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
|
||||
{
|
||||
struct iphdr *iph;
|
||||
@@ -437,9 +437,9 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
|
||||
inhdr_error:
|
||||
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
|
||||
drop:
|
||||
kfree_skb(skb);
|
||||
kfree_skb(skb);
|
||||
out:
|
||||
return NET_RX_DROP;
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ip_statistics);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* Version: $Id: ip_options.c,v 1.21 2001/09/01 00:31:50 davem Exp $
|
||||
*
|
||||
* Authors: A.N.Kuznetsov
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/capability.h>
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <net/route.h>
|
||||
#include <net/cipso_ipv4.h>
|
||||
|
||||
/*
|
||||
/*
|
||||
* Write options to IP header, record destination address to
|
||||
* source route option, address of outgoing interface
|
||||
* (we should already know it, so that this function is allowed be
|
||||
@@ -76,7 +76,7 @@ void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Provided (sopt, skb) points to received options,
|
||||
* build in dopt compiled option set appropriate for answering.
|
||||
* i.e. invert SRR option, copy anothers,
|
||||
@@ -85,7 +85,7 @@ void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
|
||||
* NOTE: dopt cannot point to skb.
|
||||
*/
|
||||
|
||||
int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
|
||||
int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
|
||||
{
|
||||
struct ip_options *sopt;
|
||||
unsigned char *sptr, *dptr;
|
||||
@@ -215,7 +215,7 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
|
||||
* Simple and stupid 8), but the most efficient way.
|
||||
*/
|
||||
|
||||
void ip_options_fragment(struct sk_buff * skb)
|
||||
void ip_options_fragment(struct sk_buff * skb)
|
||||
{
|
||||
unsigned char * optptr = skb->nh.raw + sizeof(struct iphdr);
|
||||
struct ip_options * opt = &(IPCB(skb)->opt);
|
||||
@@ -370,7 +370,7 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb)
|
||||
switch (optptr[3]&0xF) {
|
||||
case IPOPT_TS_TSONLY:
|
||||
opt->ts = optptr - iph;
|
||||
if (skb)
|
||||
if (skb)
|
||||
timeptr = (__be32*)&optptr[optptr[2]-1];
|
||||
opt->ts_needtime = 1;
|
||||
optptr[2] += 4;
|
||||
@@ -448,7 +448,7 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb)
|
||||
goto error;
|
||||
}
|
||||
opt->cipso = optptr - iph;
|
||||
if (cipso_v4_validate(&optptr)) {
|
||||
if (cipso_v4_validate(&optptr)) {
|
||||
pp_ptr = optptr;
|
||||
goto error;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user