ip6_tunnel: Allow policy-based routing through tunnels
This feature allows the administrator to set an fwmark for packets traversing a tunnel. This allows the use of independent routing tables for tunneled packets without the use of iptables. Signed-off-by: Craig Gallek <kraig@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Este cometimento está contido em:

cometido por
David S. Miller

ascendente
8e6c1812e6
cometimento
0a473b82cb
@@ -657,6 +657,7 @@ vti6_tnl_change(struct ip6_tnl *t, const struct __ip6_tnl_parm *p)
|
||||
t->parms.i_key = p->i_key;
|
||||
t->parms.o_key = p->o_key;
|
||||
t->parms.proto = p->proto;
|
||||
t->parms.fwmark = p->fwmark;
|
||||
dst_cache_reset(&t->dst_cache);
|
||||
vti6_link_config(t);
|
||||
return 0;
|
||||
@@ -933,6 +934,9 @@ static void vti6_netlink_parms(struct nlattr *data[],
|
||||
|
||||
if (data[IFLA_VTI_OKEY])
|
||||
parms->o_key = nla_get_be32(data[IFLA_VTI_OKEY]);
|
||||
|
||||
if (data[IFLA_VTI_FWMARK])
|
||||
parms->fwmark = nla_get_u32(data[IFLA_VTI_FWMARK]);
|
||||
}
|
||||
|
||||
static int vti6_newlink(struct net *src_net, struct net_device *dev,
|
||||
@@ -998,6 +1002,8 @@ static size_t vti6_get_size(const struct net_device *dev)
|
||||
nla_total_size(4) +
|
||||
/* IFLA_VTI_OKEY */
|
||||
nla_total_size(4) +
|
||||
/* IFLA_VTI_FWMARK */
|
||||
nla_total_size(4) +
|
||||
0;
|
||||
}
|
||||
|
||||
@@ -1010,7 +1016,8 @@ static int vti6_fill_info(struct sk_buff *skb, const struct net_device *dev)
|
||||
nla_put_in6_addr(skb, IFLA_VTI_LOCAL, &parm->laddr) ||
|
||||
nla_put_in6_addr(skb, IFLA_VTI_REMOTE, &parm->raddr) ||
|
||||
nla_put_be32(skb, IFLA_VTI_IKEY, parm->i_key) ||
|
||||
nla_put_be32(skb, IFLA_VTI_OKEY, parm->o_key))
|
||||
nla_put_be32(skb, IFLA_VTI_OKEY, parm->o_key) ||
|
||||
nla_put_u32(skb, IFLA_VTI_FWMARK, parm->fwmark))
|
||||
goto nla_put_failure;
|
||||
return 0;
|
||||
|
||||
@@ -1024,6 +1031,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = {
|
||||
[IFLA_VTI_REMOTE] = { .len = sizeof(struct in6_addr) },
|
||||
[IFLA_VTI_IKEY] = { .type = NLA_U32 },
|
||||
[IFLA_VTI_OKEY] = { .type = NLA_U32 },
|
||||
[IFLA_VTI_FWMARK] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
static struct rtnl_link_ops vti6_link_ops __read_mostly = {
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador