Commit 6a31d2a9 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

fib: cleanups

Code style cleanups before upcoming functional changes.
C99 initializer for fib_props array.
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e3d32687
...@@ -225,30 +225,33 @@ EXPORT_SYMBOL(inet_addr_type); ...@@ -225,30 +225,33 @@ EXPORT_SYMBOL(inet_addr_type);
unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev, unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev,
__be32 addr) __be32 addr)
{ {
return __inet_dev_addr_type(net, dev, addr); return __inet_dev_addr_type(net, dev, addr);
} }
EXPORT_SYMBOL(inet_dev_addr_type); EXPORT_SYMBOL(inet_dev_addr_type);
/* Given (packet source, input interface) and optional (dst, oif, tos): /* Given (packet source, input interface) and optional (dst, oif, tos):
- (main) check, that source is valid i.e. not broadcast or our local * - (main) check, that source is valid i.e. not broadcast or our local
address. * address.
- figure out what "logical" interface this packet arrived * - figure out what "logical" interface this packet arrived
and calculate "specific destination" address. * and calculate "specific destination" address.
- check, that packet arrived from expected physical interface. * - check, that packet arrived from expected physical interface.
*/ */
int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif, int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
struct net_device *dev, __be32 *spec_dst, struct net_device *dev, __be32 *spec_dst,
u32 *itag, u32 mark) u32 *itag, u32 mark)
{ {
struct in_device *in_dev; struct in_device *in_dev;
struct flowi fl = { .nl_u = { .ip4_u = struct flowi fl = {
{ .daddr = src, .nl_u = {
.saddr = dst, .ip4_u = {
.tos = tos } }, .daddr = src,
.mark = mark, .saddr = dst,
.iif = oif }; .tos = tos
}
},
.mark = mark,
.iif = oif
};
struct fib_result res; struct fib_result res;
int no_addr, rpf, accept_local; int no_addr, rpf, accept_local;
bool dev_match; bool dev_match;
...@@ -477,9 +480,9 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt, ...@@ -477,9 +480,9 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt,
} }
/* /*
* Handle IP routing ioctl calls. These are used to manipulate the routing tables * Handle IP routing ioctl calls.
* These are used to manipulate the routing tables
*/ */
int ip_rt_ioctl(struct net *net, unsigned int cmd, void __user *arg) int ip_rt_ioctl(struct net *net, unsigned int cmd, void __user *arg)
{ {
struct fib_config cfg; struct fib_config cfg;
...@@ -523,7 +526,7 @@ int ip_rt_ioctl(struct net *net, unsigned int cmd, void __user *arg) ...@@ -523,7 +526,7 @@ int ip_rt_ioctl(struct net *net, unsigned int cmd, void __user *arg)
return -EINVAL; return -EINVAL;
} }
const struct nla_policy rtm_ipv4_policy[RTA_MAX+1] = { const struct nla_policy rtm_ipv4_policy[RTA_MAX + 1] = {
[RTA_DST] = { .type = NLA_U32 }, [RTA_DST] = { .type = NLA_U32 },
[RTA_SRC] = { .type = NLA_U32 }, [RTA_SRC] = { .type = NLA_U32 },
[RTA_IIF] = { .type = NLA_U32 }, [RTA_IIF] = { .type = NLA_U32 },
...@@ -537,7 +540,7 @@ const struct nla_policy rtm_ipv4_policy[RTA_MAX+1] = { ...@@ -537,7 +540,7 @@ const struct nla_policy rtm_ipv4_policy[RTA_MAX+1] = {
}; };
static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
struct nlmsghdr *nlh, struct fib_config *cfg) struct nlmsghdr *nlh, struct fib_config *cfg)
{ {
struct nlattr *attr; struct nlattr *attr;
int err, remaining; int err, remaining;
...@@ -692,12 +695,11 @@ static int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb) ...@@ -692,12 +695,11 @@ static int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
} }
/* Prepare and feed intra-kernel routing request. /* Prepare and feed intra-kernel routing request.
Really, it should be netlink message, but :-( netlink * Really, it should be netlink message, but :-( netlink
can be not configured, so that we feed it directly * can be not configured, so that we feed it directly
to fib engine. It is legal, because all events occur * to fib engine. It is legal, because all events occur
only when netlink is already locked. * only when netlink is already locked.
*/ */
static void fib_magic(int cmd, int type, __be32 dst, int dst_len, struct in_ifaddr *ifa) static void fib_magic(int cmd, int type, __be32 dst, int dst_len, struct in_ifaddr *ifa)
{ {
struct net *net = dev_net(ifa->ifa_dev->dev); struct net *net = dev_net(ifa->ifa_dev->dev);
...@@ -743,9 +745,9 @@ void fib_add_ifaddr(struct in_ifaddr *ifa) ...@@ -743,9 +745,9 @@ void fib_add_ifaddr(struct in_ifaddr *ifa)
struct in_ifaddr *prim = ifa; struct in_ifaddr *prim = ifa;
__be32 mask = ifa->ifa_mask; __be32 mask = ifa->ifa_mask;
__be32 addr = ifa->ifa_local; __be32 addr = ifa->ifa_local;
__be32 prefix = ifa->ifa_address&mask; __be32 prefix = ifa->ifa_address & mask;
if (ifa->ifa_flags&IFA_F_SECONDARY) { if (ifa->ifa_flags & IFA_F_SECONDARY) {
prim = inet_ifa_byprefix(in_dev, prefix, mask); prim = inet_ifa_byprefix(in_dev, prefix, mask);
if (prim == NULL) { if (prim == NULL) {
printk(KERN_WARNING "fib_add_ifaddr: bug: prim == NULL\n"); printk(KERN_WARNING "fib_add_ifaddr: bug: prim == NULL\n");
...@@ -755,22 +757,24 @@ void fib_add_ifaddr(struct in_ifaddr *ifa) ...@@ -755,22 +757,24 @@ void fib_add_ifaddr(struct in_ifaddr *ifa)
fib_magic(RTM_NEWROUTE, RTN_LOCAL, addr, 32, prim); fib_magic(RTM_NEWROUTE, RTN_LOCAL, addr, 32, prim);
if (!(dev->flags&IFF_UP)) if (!(dev->flags & IFF_UP))
return; return;
/* Add broadcast address, if it is explicitly assigned. */ /* Add broadcast address, if it is explicitly assigned. */
if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF)) if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF))
fib_magic(RTM_NEWROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim); fib_magic(RTM_NEWROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim);
if (!ipv4_is_zeronet(prefix) && !(ifa->ifa_flags&IFA_F_SECONDARY) && if (!ipv4_is_zeronet(prefix) && !(ifa->ifa_flags & IFA_F_SECONDARY) &&
(prefix != addr || ifa->ifa_prefixlen < 32)) { (prefix != addr || ifa->ifa_prefixlen < 32)) {
fib_magic(RTM_NEWROUTE, dev->flags&IFF_LOOPBACK ? RTN_LOCAL : fib_magic(RTM_NEWROUTE,
RTN_UNICAST, prefix, ifa->ifa_prefixlen, prim); dev->flags & IFF_LOOPBACK ? RTN_LOCAL : RTN_UNICAST,
prefix, ifa->ifa_prefixlen, prim);
/* Add network specific broadcasts, when it takes a sense */ /* Add network specific broadcasts, when it takes a sense */
if (ifa->ifa_prefixlen < 31) { if (ifa->ifa_prefixlen < 31) {
fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix, 32, prim); fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix, 32, prim);
fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix|~mask, 32, prim); fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix | ~mask,
32, prim);
} }
} }
} }
...@@ -781,17 +785,18 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa) ...@@ -781,17 +785,18 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa)
struct net_device *dev = in_dev->dev; struct net_device *dev = in_dev->dev;
struct in_ifaddr *ifa1; struct in_ifaddr *ifa1;
struct in_ifaddr *prim = ifa; struct in_ifaddr *prim = ifa;
__be32 brd = ifa->ifa_address|~ifa->ifa_mask; __be32 brd = ifa->ifa_address | ~ifa->ifa_mask;
__be32 any = ifa->ifa_address&ifa->ifa_mask; __be32 any = ifa->ifa_address & ifa->ifa_mask;
#define LOCAL_OK 1 #define LOCAL_OK 1
#define BRD_OK 2 #define BRD_OK 2
#define BRD0_OK 4 #define BRD0_OK 4
#define BRD1_OK 8 #define BRD1_OK 8
unsigned ok = 0; unsigned ok = 0;
if (!(ifa->ifa_flags&IFA_F_SECONDARY)) if (!(ifa->ifa_flags & IFA_F_SECONDARY))
fib_magic(RTM_DELROUTE, dev->flags&IFF_LOOPBACK ? RTN_LOCAL : fib_magic(RTM_DELROUTE,
RTN_UNICAST, any, ifa->ifa_prefixlen, prim); dev->flags & IFF_LOOPBACK ? RTN_LOCAL : RTN_UNICAST,
any, ifa->ifa_prefixlen, prim);
else { else {
prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask); prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
if (prim == NULL) { if (prim == NULL) {
...@@ -801,9 +806,9 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa) ...@@ -801,9 +806,9 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa)
} }
/* Deletion is more complicated than add. /* Deletion is more complicated than add.
We should take care of not to delete too much :-) * We should take care of not to delete too much :-)
*
Scan address list to be sure that addresses are really gone. * Scan address list to be sure that addresses are really gone.
*/ */
for (ifa1 = in_dev->ifa_list; ifa1; ifa1 = ifa1->ifa_next) { for (ifa1 = in_dev->ifa_list; ifa1; ifa1 = ifa1->ifa_next) {
...@@ -817,23 +822,23 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa) ...@@ -817,23 +822,23 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa)
ok |= BRD0_OK; ok |= BRD0_OK;
} }
if (!(ok&BRD_OK)) if (!(ok & BRD_OK))
fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim); fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim);
if (!(ok&BRD1_OK)) if (!(ok & BRD1_OK))
fib_magic(RTM_DELROUTE, RTN_BROADCAST, brd, 32, prim); fib_magic(RTM_DELROUTE, RTN_BROADCAST, brd, 32, prim);
if (!(ok&BRD0_OK)) if (!(ok & BRD0_OK))
fib_magic(RTM_DELROUTE, RTN_BROADCAST, any, 32, prim); fib_magic(RTM_DELROUTE, RTN_BROADCAST, any, 32, prim);
if (!(ok&LOCAL_OK)) { if (!(ok & LOCAL_OK)) {
fib_magic(RTM_DELROUTE, RTN_LOCAL, ifa->ifa_local, 32, prim); fib_magic(RTM_DELROUTE, RTN_LOCAL, ifa->ifa_local, 32, prim);
/* Check, that this local address finally disappeared. */ /* Check, that this local address finally disappeared. */
if (inet_addr_type(dev_net(dev), ifa->ifa_local) != RTN_LOCAL) { if (inet_addr_type(dev_net(dev), ifa->ifa_local) != RTN_LOCAL) {
/* And the last, but not the least thing. /* And the last, but not the least thing.
We must flush stray FIB entries. * We must flush stray FIB entries.
*
First of all, we scan fib_info list searching * First of all, we scan fib_info list searching
for stray nexthop entries, then ignite fib_flush. * for stray nexthop entries, then ignite fib_flush.
*/ */
if (fib_sync_down_addr(dev_net(dev), ifa->ifa_local)) if (fib_sync_down_addr(dev_net(dev), ifa->ifa_local))
fib_flush(dev_net(dev)); fib_flush(dev_net(dev));
} }
...@@ -844,14 +849,20 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa) ...@@ -844,14 +849,20 @@ static void fib_del_ifaddr(struct in_ifaddr *ifa)
#undef BRD1_OK #undef BRD1_OK
} }
static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb ) static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb)
{ {
struct fib_result res; struct fib_result res;
struct flowi fl = { .mark = frn->fl_mark, struct flowi fl = {
.nl_u = { .ip4_u = { .daddr = frn->fl_addr, .mark = frn->fl_mark,
.tos = frn->fl_tos, .nl_u = {
.scope = frn->fl_scope } } }; .ip4_u = {
.daddr = frn->fl_addr,
.tos = frn->fl_tos,
.scope = frn->fl_scope
}
}
};
#ifdef CONFIG_IP_MULTIPLE_TABLES #ifdef CONFIG_IP_MULTIPLE_TABLES
res.r = NULL; res.r = NULL;
...@@ -899,8 +910,8 @@ static void nl_fib_input(struct sk_buff *skb) ...@@ -899,8 +910,8 @@ static void nl_fib_input(struct sk_buff *skb)
nl_fib_lookup(frn, tb); nl_fib_lookup(frn, tb);
pid = NETLINK_CB(skb).pid; /* pid of sending process */ pid = NETLINK_CB(skb).pid; /* pid of sending process */
NETLINK_CB(skb).pid = 0; /* from kernel */ NETLINK_CB(skb).pid = 0; /* from kernel */
NETLINK_CB(skb).dst_group = 0; /* unicast */ NETLINK_CB(skb).dst_group = 0; /* unicast */
netlink_unicast(net->ipv4.fibnl, skb, pid, MSG_DONTWAIT); netlink_unicast(net->ipv4.fibnl, skb, pid, MSG_DONTWAIT);
} }
...@@ -947,7 +958,7 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event, ...@@ -947,7 +958,7 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
fib_del_ifaddr(ifa); fib_del_ifaddr(ifa);
if (ifa->ifa_dev->ifa_list == NULL) { if (ifa->ifa_dev->ifa_list == NULL) {
/* Last address was deleted from this interface. /* Last address was deleted from this interface.
Disable IP. * Disable IP.
*/ */
fib_disable_ip(dev, 1, 0); fib_disable_ip(dev, 1, 0);
} else { } else {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* IPv4 Forwarding Information Base: policy rules. * IPv4 Forwarding Information Base: policy rules.
* *
* Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
* Thomas Graf <tgraf@suug.ch> * Thomas Graf <tgraf@suug.ch>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
* *
* Fixes: * Fixes:
* Rani Assaf : local_rule cannot be deleted * Rani Assaf : local_rule cannot be deleted
* Marc Boucher : routing by fwmark * Marc Boucher : routing by fwmark
*/ */
...@@ -32,8 +32,7 @@ ...@@ -32,8 +32,7 @@
#include <net/ip_fib.h> #include <net/ip_fib.h>
#include <net/fib_rules.h> #include <net/fib_rules.h>
struct fib4_rule struct fib4_rule {
{
struct fib_rule common; struct fib_rule common;
u8 dst_len; u8 dst_len;
u8 src_len; u8 src_len;
...@@ -91,7 +90,8 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp, ...@@ -91,7 +90,8 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp,
goto errout; goto errout;
} }
if ((tbl = fib_get_table(rule->fr_net, rule->table)) == NULL) tbl = fib_get_table(rule->fr_net, rule->table);
if (!tbl)
goto errout; goto errout;
err = fib_table_lookup(tbl, flp, (struct fib_result *) arg->result); err = fib_table_lookup(tbl, flp, (struct fib_result *) arg->result);
......
This diff is collapsed.
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