diff options
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 7596f071d308..9da6e02eaaeb 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -107,8 +107,6 @@ static const struct neigh_ops ndisc_generic_ops = { | |||
107 | .error_report = ndisc_error_report, | 107 | .error_report = ndisc_error_report, |
108 | .output = neigh_resolve_output, | 108 | .output = neigh_resolve_output, |
109 | .connected_output = neigh_connected_output, | 109 | .connected_output = neigh_connected_output, |
110 | .hh_output = dev_queue_xmit, | ||
111 | .queue_xmit = dev_queue_xmit, | ||
112 | }; | 110 | }; |
113 | 111 | ||
114 | static const struct neigh_ops ndisc_hh_ops = { | 112 | static const struct neigh_ops ndisc_hh_ops = { |
@@ -117,17 +115,13 @@ static const struct neigh_ops ndisc_hh_ops = { | |||
117 | .error_report = ndisc_error_report, | 115 | .error_report = ndisc_error_report, |
118 | .output = neigh_resolve_output, | 116 | .output = neigh_resolve_output, |
119 | .connected_output = neigh_resolve_output, | 117 | .connected_output = neigh_resolve_output, |
120 | .hh_output = dev_queue_xmit, | ||
121 | .queue_xmit = dev_queue_xmit, | ||
122 | }; | 118 | }; |
123 | 119 | ||
124 | 120 | ||
125 | static const struct neigh_ops ndisc_direct_ops = { | 121 | static const struct neigh_ops ndisc_direct_ops = { |
126 | .family = AF_INET6, | 122 | .family = AF_INET6, |
127 | .output = dev_queue_xmit, | 123 | .output = neigh_direct_output, |
128 | .connected_output = dev_queue_xmit, | 124 | .connected_output = neigh_direct_output, |
129 | .hh_output = dev_queue_xmit, | ||
130 | .queue_xmit = dev_queue_xmit, | ||
131 | }; | 125 | }; |
132 | 126 | ||
133 | struct neigh_table nd_tbl = { | 127 | struct neigh_table nd_tbl = { |
@@ -392,7 +386,7 @@ static int ndisc_constructor(struct neighbour *neigh) | |||
392 | if (!dev->header_ops) { | 386 | if (!dev->header_ops) { |
393 | neigh->nud_state = NUD_NOARP; | 387 | neigh->nud_state = NUD_NOARP; |
394 | neigh->ops = &ndisc_direct_ops; | 388 | neigh->ops = &ndisc_direct_ops; |
395 | neigh->output = neigh->ops->queue_xmit; | 389 | neigh->output = neigh_direct_output; |
396 | } else { | 390 | } else { |
397 | if (is_multicast) { | 391 | if (is_multicast) { |
398 | neigh->nud_state = NUD_NOARP; | 392 | neigh->nud_state = NUD_NOARP; |
@@ -1244,7 +1238,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1244 | rt = rt6_get_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev); | 1238 | rt = rt6_get_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev); |
1245 | 1239 | ||
1246 | if (rt) | 1240 | if (rt) |
1247 | neigh = rt->rt6i_nexthop; | 1241 | neigh = dst_get_neighbour(&rt->dst); |
1248 | 1242 | ||
1249 | if (rt && lifetime == 0) { | 1243 | if (rt && lifetime == 0) { |
1250 | neigh_clone(neigh); | 1244 | neigh_clone(neigh); |
@@ -1265,7 +1259,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1265 | return; | 1259 | return; |
1266 | } | 1260 | } |
1267 | 1261 | ||
1268 | neigh = rt->rt6i_nexthop; | 1262 | neigh = dst_get_neighbour(&rt->dst); |
1269 | if (neigh == NULL) { | 1263 | if (neigh == NULL) { |
1270 | ND_PRINTK0(KERN_ERR | 1264 | ND_PRINTK0(KERN_ERR |
1271 | "ICMPv6 RA: %s() got default router without neighbour.\n", | 1265 | "ICMPv6 RA: %s() got default router without neighbour.\n", |