Skip to content

Commit 439ccd8

Browse files
committed
Merge branch 'mlxsw-IPIP-cleanups'
Jiri Pirko says: ==================== mlxsw: IPIP cleanups In the first patch, a forgotten #include is added. Even though the code compiles as-is, the include is necessary for modules that should include spectrum_ipip.h. The second patch corrects an assumption that IPv6 tunnels use struct ip_tunnel_parm to store tunnel parameters. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents d75de7b + e437f3b commit 439ccd8

File tree

3 files changed

+73
-91
lines changed

3 files changed

+73
-91
lines changed

drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c

Lines changed: 55 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -37,122 +37,89 @@
3737
#include "spectrum_ipip.h"
3838

3939
struct ip_tunnel_parm
40-
mlxsw_sp_ipip_netdev_parms(const struct net_device *ol_dev)
40+
mlxsw_sp_ipip_netdev_parms4(const struct net_device *ol_dev)
4141
{
4242
struct ip_tunnel *tun = netdev_priv(ol_dev);
4343

4444
return tun->parms;
4545
}
4646

47-
static bool mlxsw_sp_ipip_parms_has_ikey(struct ip_tunnel_parm parms)
47+
static bool mlxsw_sp_ipip_parms4_has_ikey(struct ip_tunnel_parm parms)
4848
{
4949
return !!(parms.i_flags & TUNNEL_KEY);
5050
}
5151

52-
static bool mlxsw_sp_ipip_parms_has_okey(struct ip_tunnel_parm parms)
52+
static bool mlxsw_sp_ipip_parms4_has_okey(struct ip_tunnel_parm parms)
5353
{
5454
return !!(parms.o_flags & TUNNEL_KEY);
5555
}
5656

57-
static u32 mlxsw_sp_ipip_parms_ikey(struct ip_tunnel_parm parms)
57+
static u32 mlxsw_sp_ipip_parms4_ikey(struct ip_tunnel_parm parms)
5858
{
59-
return mlxsw_sp_ipip_parms_has_ikey(parms) ?
59+
return mlxsw_sp_ipip_parms4_has_ikey(parms) ?
6060
be32_to_cpu(parms.i_key) : 0;
6161
}
6262

63-
static u32 mlxsw_sp_ipip_parms_okey(struct ip_tunnel_parm parms)
63+
static u32 mlxsw_sp_ipip_parms4_okey(struct ip_tunnel_parm parms)
6464
{
65-
return mlxsw_sp_ipip_parms_has_okey(parms) ?
65+
return mlxsw_sp_ipip_parms4_has_okey(parms) ?
6666
be32_to_cpu(parms.o_key) : 0;
6767
}
6868

69-
static __be32 mlxsw_sp_ipip_parms_saddr4(struct ip_tunnel_parm parms)
69+
static union mlxsw_sp_l3addr
70+
mlxsw_sp_ipip_parms4_saddr(struct ip_tunnel_parm parms)
7071
{
71-
return parms.iph.saddr;
72+
return (union mlxsw_sp_l3addr) { .addr4 = parms.iph.saddr };
7273
}
7374

7475
static union mlxsw_sp_l3addr
75-
mlxsw_sp_ipip_parms_saddr(enum mlxsw_sp_l3proto proto,
76-
struct ip_tunnel_parm parms)
76+
mlxsw_sp_ipip_parms4_daddr(struct ip_tunnel_parm parms)
7777
{
78-
switch (proto) {
79-
case MLXSW_SP_L3_PROTO_IPV4:
80-
return (union mlxsw_sp_l3addr) {
81-
.addr4 = mlxsw_sp_ipip_parms_saddr4(parms),
82-
};
83-
case MLXSW_SP_L3_PROTO_IPV6:
84-
break;
85-
}
86-
87-
WARN_ON(1);
88-
return (union mlxsw_sp_l3addr) {
89-
.addr4 = 0,
90-
};
78+
return (union mlxsw_sp_l3addr) { .addr4 = parms.iph.daddr };
9179
}
9280

93-
static __be32 mlxsw_sp_ipip_parms_daddr4(struct ip_tunnel_parm parms)
81+
union mlxsw_sp_l3addr
82+
mlxsw_sp_ipip_netdev_saddr(enum mlxsw_sp_l3proto proto,
83+
const struct net_device *ol_dev)
9484
{
95-
return parms.iph.daddr;
96-
}
85+
struct ip_tunnel_parm parms4;
9786

98-
static union mlxsw_sp_l3addr
99-
mlxsw_sp_ipip_parms_daddr(enum mlxsw_sp_l3proto proto,
100-
struct ip_tunnel_parm parms)
101-
{
10287
switch (proto) {
10388
case MLXSW_SP_L3_PROTO_IPV4:
104-
return (union mlxsw_sp_l3addr) {
105-
.addr4 = mlxsw_sp_ipip_parms_daddr4(parms),
106-
};
89+
parms4 = mlxsw_sp_ipip_netdev_parms4(ol_dev);
90+
return mlxsw_sp_ipip_parms4_saddr(parms4);
10791
case MLXSW_SP_L3_PROTO_IPV6:
10892
break;
10993
}
11094

11195
WARN_ON(1);
112-
return (union mlxsw_sp_l3addr) {
113-
.addr4 = 0,
114-
};
115-
}
116-
117-
static bool mlxsw_sp_ipip_netdev_has_ikey(const struct net_device *ol_dev)
118-
{
119-
return mlxsw_sp_ipip_parms_has_ikey(mlxsw_sp_ipip_netdev_parms(ol_dev));
120-
}
121-
122-
static bool mlxsw_sp_ipip_netdev_has_okey(const struct net_device *ol_dev)
123-
{
124-
return mlxsw_sp_ipip_parms_has_okey(mlxsw_sp_ipip_netdev_parms(ol_dev));
96+
return (union mlxsw_sp_l3addr) {0};
12597
}
12698

127-
static u32 mlxsw_sp_ipip_netdev_ikey(const struct net_device *ol_dev)
99+
static __be32 mlxsw_sp_ipip_netdev_daddr4(const struct net_device *ol_dev)
128100
{
129-
return mlxsw_sp_ipip_parms_ikey(mlxsw_sp_ipip_netdev_parms(ol_dev));
130-
}
131101

132-
static u32 mlxsw_sp_ipip_netdev_okey(const struct net_device *ol_dev)
133-
{
134-
return mlxsw_sp_ipip_parms_okey(mlxsw_sp_ipip_netdev_parms(ol_dev));
135-
}
102+
struct ip_tunnel_parm parms4 = mlxsw_sp_ipip_netdev_parms4(ol_dev);
136103

137-
union mlxsw_sp_l3addr
138-
mlxsw_sp_ipip_netdev_saddr(enum mlxsw_sp_l3proto proto,
139-
const struct net_device *ol_dev)
140-
{
141-
return mlxsw_sp_ipip_parms_saddr(proto,
142-
mlxsw_sp_ipip_netdev_parms(ol_dev));
143-
}
144-
145-
static __be32 mlxsw_sp_ipip_netdev_daddr4(const struct net_device *ol_dev)
146-
{
147-
return mlxsw_sp_ipip_parms_daddr4(mlxsw_sp_ipip_netdev_parms(ol_dev));
104+
return mlxsw_sp_ipip_parms4_daddr(parms4).addr4;
148105
}
149106

150107
static union mlxsw_sp_l3addr
151108
mlxsw_sp_ipip_netdev_daddr(enum mlxsw_sp_l3proto proto,
152109
const struct net_device *ol_dev)
153110
{
154-
return mlxsw_sp_ipip_parms_daddr(proto,
155-
mlxsw_sp_ipip_netdev_parms(ol_dev));
111+
struct ip_tunnel_parm parms4;
112+
113+
switch (proto) {
114+
case MLXSW_SP_L3_PROTO_IPV4:
115+
parms4 = mlxsw_sp_ipip_netdev_parms4(ol_dev);
116+
return mlxsw_sp_ipip_parms4_daddr(parms4);
117+
case MLXSW_SP_L3_PROTO_IPV6:
118+
break;
119+
}
120+
121+
WARN_ON(1);
122+
return (union mlxsw_sp_l3addr) {0};
156123
}
157124

158125
static int
@@ -176,12 +143,17 @@ mlxsw_sp_ipip_fib_entry_op_gre4_rtdp(struct mlxsw_sp *mlxsw_sp,
176143
u32 tunnel_index,
177144
struct mlxsw_sp_ipip_entry *ipip_entry)
178145
{
179-
bool has_ikey = mlxsw_sp_ipip_netdev_has_ikey(ipip_entry->ol_dev);
180146
u16 rif_index = mlxsw_sp_ipip_lb_rif_index(ipip_entry->ol_lb);
181-
u32 ikey = mlxsw_sp_ipip_netdev_ikey(ipip_entry->ol_dev);
182147
char rtdp_pl[MLXSW_REG_RTDP_LEN];
148+
struct ip_tunnel_parm parms;
183149
unsigned int type_check;
150+
bool has_ikey;
184151
u32 daddr4;
152+
u32 ikey;
153+
154+
parms = mlxsw_sp_ipip_netdev_parms4(ipip_entry->ol_dev);
155+
has_ikey = mlxsw_sp_ipip_parms4_has_ikey(parms);
156+
ikey = mlxsw_sp_ipip_parms4_ikey(parms);
185157

186158
mlxsw_reg_rtdp_pack(rtdp_pl, MLXSW_REG_RTDP_TYPE_IPIP, tunnel_index);
187159

@@ -273,14 +245,15 @@ static struct mlxsw_sp_rif_ipip_lb_config
273245
mlxsw_sp_ipip_ol_loopback_config_gre4(struct mlxsw_sp *mlxsw_sp,
274246
const struct net_device *ol_dev)
275247
{
248+
struct ip_tunnel_parm parms = mlxsw_sp_ipip_netdev_parms4(ol_dev);
276249
enum mlxsw_reg_ritr_loopback_ipip_type lb_ipipt;
277250

278-
lb_ipipt = mlxsw_sp_ipip_netdev_has_okey(ol_dev) ?
251+
lb_ipipt = mlxsw_sp_ipip_parms4_has_okey(parms) ?
279252
MLXSW_REG_RITR_LOOPBACK_IPIP_TYPE_IP_IN_GRE_KEY_IN_IP :
280253
MLXSW_REG_RITR_LOOPBACK_IPIP_TYPE_IP_IN_GRE_IN_IP;
281254
return (struct mlxsw_sp_rif_ipip_lb_config){
282255
.lb_ipipt = lb_ipipt,
283-
.okey = mlxsw_sp_ipip_netdev_okey(ol_dev),
256+
.okey = mlxsw_sp_ipip_parms4_okey(parms),
284257
.ul_protocol = MLXSW_SP_L3_PROTO_IPV4,
285258
.saddr = mlxsw_sp_ipip_netdev_saddr(MLXSW_SP_L3_PROTO_IPV4,
286259
ol_dev),
@@ -300,16 +273,12 @@ mlxsw_sp_ipip_ol_netdev_change_gre4(struct mlxsw_sp *mlxsw_sp,
300273
bool update_nhs = false;
301274
int err = 0;
302275

303-
new_parms = mlxsw_sp_ipip_netdev_parms(ipip_entry->ol_dev);
276+
new_parms = mlxsw_sp_ipip_netdev_parms4(ipip_entry->ol_dev);
304277

305-
new_saddr = mlxsw_sp_ipip_parms_saddr(MLXSW_SP_L3_PROTO_IPV4,
306-
new_parms);
307-
old_saddr = mlxsw_sp_ipip_parms_saddr(MLXSW_SP_L3_PROTO_IPV4,
308-
ipip_entry->parms);
309-
new_daddr = mlxsw_sp_ipip_parms_daddr(MLXSW_SP_L3_PROTO_IPV4,
310-
new_parms);
311-
old_daddr = mlxsw_sp_ipip_parms_daddr(MLXSW_SP_L3_PROTO_IPV4,
312-
ipip_entry->parms);
278+
new_saddr = mlxsw_sp_ipip_parms4_saddr(new_parms);
279+
old_saddr = mlxsw_sp_ipip_parms4_saddr(ipip_entry->parms4);
280+
new_daddr = mlxsw_sp_ipip_parms4_daddr(new_parms);
281+
old_daddr = mlxsw_sp_ipip_parms4_daddr(ipip_entry->parms4);
313282

314283
if (!mlxsw_sp_l3addr_eq(&new_saddr, &old_saddr)) {
315284
u16 ul_tb_id = mlxsw_sp_ipip_dev_ul_tb_id(ipip_entry->ol_dev);
@@ -326,14 +295,14 @@ mlxsw_sp_ipip_ol_netdev_change_gre4(struct mlxsw_sp *mlxsw_sp,
326295
}
327296

328297
update_tunnel = true;
329-
} else if ((mlxsw_sp_ipip_parms_okey(ipip_entry->parms) !=
330-
mlxsw_sp_ipip_parms_okey(new_parms)) ||
331-
ipip_entry->parms.link != new_parms.link) {
298+
} else if ((mlxsw_sp_ipip_parms4_okey(ipip_entry->parms4) !=
299+
mlxsw_sp_ipip_parms4_okey(new_parms)) ||
300+
ipip_entry->parms4.link != new_parms.link) {
332301
update_tunnel = true;
333302
} else if (!mlxsw_sp_l3addr_eq(&new_daddr, &old_daddr)) {
334303
update_nhs = true;
335-
} else if (mlxsw_sp_ipip_parms_ikey(ipip_entry->parms) !=
336-
mlxsw_sp_ipip_parms_ikey(new_parms)) {
304+
} else if (mlxsw_sp_ipip_parms4_ikey(ipip_entry->parms4) !=
305+
mlxsw_sp_ipip_parms4_ikey(new_parms)) {
337306
update_decap = true;
338307
}
339308

@@ -350,7 +319,7 @@ mlxsw_sp_ipip_ol_netdev_change_gre4(struct mlxsw_sp *mlxsw_sp,
350319
false, false, false,
351320
extack);
352321

353-
ipip_entry->parms = new_parms;
322+
ipip_entry->parms4 = new_parms;
354323
return err;
355324
}
356325

drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@
3737

3838
#include "spectrum_router.h"
3939
#include <net/ip_fib.h>
40+
#include <linux/if_tunnel.h>
4041

4142
struct ip_tunnel_parm
42-
mlxsw_sp_ipip_netdev_parms(const struct net_device *ol_dev);
43+
mlxsw_sp_ipip_netdev_parms4(const struct net_device *ol_dev);
4344

4445
union mlxsw_sp_l3addr
4546
mlxsw_sp_ipip_netdev_saddr(enum mlxsw_sp_l3proto proto,
@@ -56,7 +57,9 @@ struct mlxsw_sp_ipip_entry {
5657
struct mlxsw_sp_rif_ipip_lb *ol_lb;
5758
struct mlxsw_sp_fib_entry *decap_fib_entry;
5859
struct list_head ipip_list_node;
59-
struct ip_tunnel_parm parms;
60+
union {
61+
struct ip_tunnel_parm parms4;
62+
};
6063
};
6164

6265
struct mlxsw_sp_ipip_ops {

drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/*
22
* drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
3-
* Copyright (c) 2016-2017 Mellanox Technologies. All rights reserved.
3+
* Copyright (c) 2016-2018 Mellanox Technologies. All rights reserved.
44
* Copyright (c) 2016 Jiri Pirko <jiri@mellanox.com>
55
* Copyright (c) 2016 Ido Schimmel <idosch@mellanox.com>
66
* Copyright (c) 2016 Yotam Gigi <yotamg@mellanox.com>
7-
* Copyright (c) 2017 Petr Machata <petrm@mellanox.com>
7+
* Copyright (c) 2017-2018 Petr Machata <petrm@mellanox.com>
88
*
99
* Redistribution and use in source and binary forms, with or without
1010
* modification, are permitted provided that the following conditions are met:
@@ -1020,9 +1020,11 @@ mlxsw_sp_ipip_entry_alloc(struct mlxsw_sp *mlxsw_sp,
10201020
enum mlxsw_sp_ipip_type ipipt,
10211021
struct net_device *ol_dev)
10221022
{
1023+
const struct mlxsw_sp_ipip_ops *ipip_ops;
10231024
struct mlxsw_sp_ipip_entry *ipip_entry;
10241025
struct mlxsw_sp_ipip_entry *ret = NULL;
10251026

1027+
ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipipt];
10261028
ipip_entry = kzalloc(sizeof(*ipip_entry), GFP_KERNEL);
10271029
if (!ipip_entry)
10281030
return ERR_PTR(-ENOMEM);
@@ -1036,7 +1038,15 @@ mlxsw_sp_ipip_entry_alloc(struct mlxsw_sp *mlxsw_sp,
10361038

10371039
ipip_entry->ipipt = ipipt;
10381040
ipip_entry->ol_dev = ol_dev;
1039-
ipip_entry->parms = mlxsw_sp_ipip_netdev_parms(ol_dev);
1041+
1042+
switch (ipip_ops->ul_proto) {
1043+
case MLXSW_SP_L3_PROTO_IPV4:
1044+
ipip_entry->parms4 = mlxsw_sp_ipip_netdev_parms4(ol_dev);
1045+
break;
1046+
case MLXSW_SP_L3_PROTO_IPV6:
1047+
WARN_ON(1);
1048+
break;
1049+
}
10401050

10411051
return ipip_entry;
10421052

0 commit comments

Comments
 (0)