37
37
#include "spectrum_ipip.h"
38
38
39
39
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 )
41
41
{
42
42
struct ip_tunnel * tun = netdev_priv (ol_dev );
43
43
44
44
return tun -> parms ;
45
45
}
46
46
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 )
48
48
{
49
49
return !!(parms .i_flags & TUNNEL_KEY );
50
50
}
51
51
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 )
53
53
{
54
54
return !!(parms .o_flags & TUNNEL_KEY );
55
55
}
56
56
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 )
58
58
{
59
- return mlxsw_sp_ipip_parms_has_ikey (parms ) ?
59
+ return mlxsw_sp_ipip_parms4_has_ikey (parms ) ?
60
60
be32_to_cpu (parms .i_key ) : 0 ;
61
61
}
62
62
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 )
64
64
{
65
- return mlxsw_sp_ipip_parms_has_okey (parms ) ?
65
+ return mlxsw_sp_ipip_parms4_has_okey (parms ) ?
66
66
be32_to_cpu (parms .o_key ) : 0 ;
67
67
}
68
68
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 )
70
71
{
71
- return parms .iph .saddr ;
72
+ return ( union mlxsw_sp_l3addr ) { . addr4 = parms .iph .saddr } ;
72
73
}
73
74
74
75
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 )
77
77
{
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 };
91
79
}
92
80
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 )
94
84
{
95
- return parms .iph .daddr ;
96
- }
85
+ struct ip_tunnel_parm parms4 ;
97
86
98
- static union mlxsw_sp_l3addr
99
- mlxsw_sp_ipip_parms_daddr (enum mlxsw_sp_l3proto proto ,
100
- struct ip_tunnel_parm parms )
101
- {
102
87
switch (proto ) {
103
88
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 );
107
91
case MLXSW_SP_L3_PROTO_IPV6 :
108
92
break ;
109
93
}
110
94
111
95
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 };
125
97
}
126
98
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 )
128
100
{
129
- return mlxsw_sp_ipip_parms_ikey (mlxsw_sp_ipip_netdev_parms (ol_dev ));
130
- }
131
101
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 );
136
103
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 ;
148
105
}
149
106
150
107
static union mlxsw_sp_l3addr
151
108
mlxsw_sp_ipip_netdev_daddr (enum mlxsw_sp_l3proto proto ,
152
109
const struct net_device * ol_dev )
153
110
{
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 };
156
123
}
157
124
158
125
static int
@@ -176,12 +143,17 @@ mlxsw_sp_ipip_fib_entry_op_gre4_rtdp(struct mlxsw_sp *mlxsw_sp,
176
143
u32 tunnel_index ,
177
144
struct mlxsw_sp_ipip_entry * ipip_entry )
178
145
{
179
- bool has_ikey = mlxsw_sp_ipip_netdev_has_ikey (ipip_entry -> ol_dev );
180
146
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 );
182
147
char rtdp_pl [MLXSW_REG_RTDP_LEN ];
148
+ struct ip_tunnel_parm parms ;
183
149
unsigned int type_check ;
150
+ bool has_ikey ;
184
151
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 );
185
157
186
158
mlxsw_reg_rtdp_pack (rtdp_pl , MLXSW_REG_RTDP_TYPE_IPIP , tunnel_index );
187
159
@@ -273,14 +245,15 @@ static struct mlxsw_sp_rif_ipip_lb_config
273
245
mlxsw_sp_ipip_ol_loopback_config_gre4 (struct mlxsw_sp * mlxsw_sp ,
274
246
const struct net_device * ol_dev )
275
247
{
248
+ struct ip_tunnel_parm parms = mlxsw_sp_ipip_netdev_parms4 (ol_dev );
276
249
enum mlxsw_reg_ritr_loopback_ipip_type lb_ipipt ;
277
250
278
- lb_ipipt = mlxsw_sp_ipip_netdev_has_okey ( ol_dev ) ?
251
+ lb_ipipt = mlxsw_sp_ipip_parms4_has_okey ( parms ) ?
279
252
MLXSW_REG_RITR_LOOPBACK_IPIP_TYPE_IP_IN_GRE_KEY_IN_IP :
280
253
MLXSW_REG_RITR_LOOPBACK_IPIP_TYPE_IP_IN_GRE_IN_IP ;
281
254
return (struct mlxsw_sp_rif_ipip_lb_config ){
282
255
.lb_ipipt = lb_ipipt ,
283
- .okey = mlxsw_sp_ipip_netdev_okey ( ol_dev ),
256
+ .okey = mlxsw_sp_ipip_parms4_okey ( parms ),
284
257
.ul_protocol = MLXSW_SP_L3_PROTO_IPV4 ,
285
258
.saddr = mlxsw_sp_ipip_netdev_saddr (MLXSW_SP_L3_PROTO_IPV4 ,
286
259
ol_dev ),
@@ -300,16 +273,12 @@ mlxsw_sp_ipip_ol_netdev_change_gre4(struct mlxsw_sp *mlxsw_sp,
300
273
bool update_nhs = false;
301
274
int err = 0 ;
302
275
303
- new_parms = mlxsw_sp_ipip_netdev_parms (ipip_entry -> ol_dev );
276
+ new_parms = mlxsw_sp_ipip_netdev_parms4 (ipip_entry -> ol_dev );
304
277
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 );
313
282
314
283
if (!mlxsw_sp_l3addr_eq (& new_saddr , & old_saddr )) {
315
284
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,
326
295
}
327
296
328
297
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 ) {
332
301
update_tunnel = true;
333
302
} else if (!mlxsw_sp_l3addr_eq (& new_daddr , & old_daddr )) {
334
303
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 )) {
337
306
update_decap = true;
338
307
}
339
308
@@ -350,7 +319,7 @@ mlxsw_sp_ipip_ol_netdev_change_gre4(struct mlxsw_sp *mlxsw_sp,
350
319
false, false, false,
351
320
extack );
352
321
353
- ipip_entry -> parms = new_parms ;
322
+ ipip_entry -> parms4 = new_parms ;
354
323
return err ;
355
324
}
356
325
0 commit comments