@@ -126,8 +126,6 @@ static int ipgre_tunnel_bind_dev(struct net_device *dev);
126
126
127
127
/* Fallback tunnel: no source, no destination, no key, no options */
128
128
129
- static int ipgre_fb_tunnel_init (struct net_device * dev );
130
-
131
129
#define HASH_SIZE 16
132
130
133
131
static int ipgre_net_id ;
@@ -1142,6 +1140,7 @@ static int ipgre_open(struct net_device *dev)
1142
1140
static int ipgre_close (struct net_device * dev )
1143
1141
{
1144
1142
struct ip_tunnel * t = netdev_priv (dev );
1143
+
1145
1144
if (ipv4_is_multicast (t -> parms .iph .daddr ) && t -> mlink ) {
1146
1145
struct in_device * in_dev ;
1147
1146
in_dev = inetdev_by_index (dev_net (dev ), t -> mlink );
@@ -1155,14 +1154,22 @@ static int ipgre_close(struct net_device *dev)
1155
1154
1156
1155
#endif
1157
1156
1157
+ static const struct net_device_ops ipgre_netdev_ops = {
1158
+ .ndo_init = ipgre_tunnel_init ,
1159
+ .ndo_uninit = ipgre_tunnel_uninit ,
1160
+ #ifdef CONFIG_NET_IPGRE_BROADCAST
1161
+ .ndo_open = ipgre_open ,
1162
+ .ndo_stop = ipgre_close ,
1163
+ #endif
1164
+ .ndo_start_xmit = ipgre_tunnel_xmit ,
1165
+ .ndo_do_ioctl = ipgre_tunnel_ioctl ,
1166
+ .ndo_change_mtu = ipgre_tunnel_change_mtu ,
1167
+ };
1168
+
1158
1169
static void ipgre_tunnel_setup (struct net_device * dev )
1159
1170
{
1160
- dev -> init = ipgre_tunnel_init ;
1161
- dev -> uninit = ipgre_tunnel_uninit ;
1171
+ dev -> netdev_ops = & ipgre_netdev_ops ;
1162
1172
dev -> destructor = free_netdev ;
1163
- dev -> hard_start_xmit = ipgre_tunnel_xmit ;
1164
- dev -> do_ioctl = ipgre_tunnel_ioctl ;
1165
- dev -> change_mtu = ipgre_tunnel_change_mtu ;
1166
1173
1167
1174
dev -> type = ARPHRD_IPGRE ;
1168
1175
dev -> needed_headroom = LL_MAX_HEADER + sizeof (struct iphdr ) + 4 ;
@@ -1194,8 +1201,6 @@ static int ipgre_tunnel_init(struct net_device *dev)
1194
1201
return - EINVAL ;
1195
1202
dev -> flags = IFF_BROADCAST ;
1196
1203
dev -> header_ops = & ipgre_header_ops ;
1197
- dev -> open = ipgre_open ;
1198
- dev -> stop = ipgre_close ;
1199
1204
}
1200
1205
#endif
1201
1206
} else
@@ -1204,7 +1209,7 @@ static int ipgre_tunnel_init(struct net_device *dev)
1204
1209
return 0 ;
1205
1210
}
1206
1211
1207
- static int ipgre_fb_tunnel_init (struct net_device * dev )
1212
+ static void ipgre_fb_tunnel_init (struct net_device * dev )
1208
1213
{
1209
1214
struct ip_tunnel * tunnel = netdev_priv (dev );
1210
1215
struct iphdr * iph = & tunnel -> parms .iph ;
@@ -1220,7 +1225,6 @@ static int ipgre_fb_tunnel_init(struct net_device *dev)
1220
1225
1221
1226
dev_hold (dev );
1222
1227
ign -> tunnels_wc [0 ] = tunnel ;
1223
- return 0 ;
1224
1228
}
1225
1229
1226
1230
@@ -1265,7 +1269,7 @@ static int ipgre_init_net(struct net *net)
1265
1269
goto err_alloc_dev ;
1266
1270
}
1267
1271
1268
- ign -> fb_tunnel_dev -> init = ipgre_fb_tunnel_init ;
1272
+ ipgre_fb_tunnel_init ( ign -> fb_tunnel_dev ) ;
1269
1273
dev_net_set (ign -> fb_tunnel_dev , net );
1270
1274
ign -> fb_tunnel_dev -> rtnl_link_ops = & ipgre_link_ops ;
1271
1275
@@ -1397,16 +1401,22 @@ static int ipgre_tap_init(struct net_device *dev)
1397
1401
return 0 ;
1398
1402
}
1399
1403
1404
+ static const struct net_device_ops ipgre_tap_netdev_ops = {
1405
+ .ndo_init = ipgre_tap_init ,
1406
+ .ndo_uninit = ipgre_tunnel_uninit ,
1407
+ .ndo_start_xmit = ipgre_tunnel_xmit ,
1408
+ .ndo_set_mac_address = eth_mac_addr ,
1409
+ .ndo_validate_addr = eth_validate_addr ,
1410
+ .ndo_change_mtu = ipgre_tunnel_change_mtu ,
1411
+ };
1412
+
1400
1413
static void ipgre_tap_setup (struct net_device * dev )
1401
1414
{
1402
1415
1403
1416
ether_setup (dev );
1404
1417
1405
- dev -> init = ipgre_tap_init ;
1406
- dev -> uninit = ipgre_tunnel_uninit ;
1418
+ dev -> netdev_ops = & ipgre_netdev_ops ;
1407
1419
dev -> destructor = free_netdev ;
1408
- dev -> hard_start_xmit = ipgre_tunnel_xmit ;
1409
- dev -> change_mtu = ipgre_tunnel_change_mtu ;
1410
1420
1411
1421
dev -> iflink = 0 ;
1412
1422
dev -> features |= NETIF_F_NETNS_LOCAL ;
0 commit comments