diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2015-03-02 01:05:28 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-03-02 16:43:40 -0500 |
| commit | 3b6a94bed0029a6b48055d89b8dea0567abca0ac (patch) | |
| tree | 97ba52a0d8d6ae197f9a76c4c34c8a760719cf0b | |
| parent | 46d4e47abee04c24055114d50e408078a09c4d36 (diff) | |
ax25: Refactor to use private neighbour operations.
AX25 already has it's own private arp cache operations to isolate
it's abuse of dev_rebuild_header to transmit packets. Add a function
ax25_neigh_construct that will allow all of the ax25 devices to
force using these operations, so that the generic arp code does
not need to.
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-hams@vger.kernel.org
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/hamradio/6pack.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/baycom_epp.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/bpqether.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/dmascc.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/hdlcdrv.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/mkiss.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/scc.c | 2 | ||||
| -rw-r--r-- | drivers/net/hamradio/yam.c | 2 | ||||
| -rw-r--r-- | include/net/ax25.h | 5 | ||||
| -rw-r--r-- | net/ax25/ax25_ip.c | 21 |
10 files changed, 42 insertions, 0 deletions
diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c index 2533933c79dc..0b8393ca8c80 100644 --- a/drivers/net/hamradio/6pack.c +++ b/drivers/net/hamradio/6pack.c | |||
| @@ -302,6 +302,7 @@ static const struct net_device_ops sp_netdev_ops = { | |||
| 302 | .ndo_stop = sp_close, | 302 | .ndo_stop = sp_close, |
| 303 | .ndo_start_xmit = sp_xmit, | 303 | .ndo_start_xmit = sp_xmit, |
| 304 | .ndo_set_mac_address = sp_set_mac_address, | 304 | .ndo_set_mac_address = sp_set_mac_address, |
| 305 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 305 | }; | 306 | }; |
| 306 | 307 | ||
| 307 | static void sp_setup(struct net_device *dev) | 308 | static void sp_setup(struct net_device *dev) |
| @@ -315,6 +316,7 @@ static void sp_setup(struct net_device *dev) | |||
| 315 | 316 | ||
| 316 | dev->addr_len = AX25_ADDR_LEN; | 317 | dev->addr_len = AX25_ADDR_LEN; |
| 317 | dev->type = ARPHRD_AX25; | 318 | dev->type = ARPHRD_AX25; |
| 319 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 318 | dev->tx_queue_len = 10; | 320 | dev->tx_queue_len = 10; |
| 319 | 321 | ||
| 320 | /* Only activated in AX.25 mode */ | 322 | /* Only activated in AX.25 mode */ |
diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c index a98c153f371e..3539ab392f7d 100644 --- a/drivers/net/hamradio/baycom_epp.c +++ b/drivers/net/hamradio/baycom_epp.c | |||
| @@ -1109,6 +1109,7 @@ static const struct net_device_ops baycom_netdev_ops = { | |||
| 1109 | .ndo_do_ioctl = baycom_ioctl, | 1109 | .ndo_do_ioctl = baycom_ioctl, |
| 1110 | .ndo_start_xmit = baycom_send_packet, | 1110 | .ndo_start_xmit = baycom_send_packet, |
| 1111 | .ndo_set_mac_address = baycom_set_mac_address, | 1111 | .ndo_set_mac_address = baycom_set_mac_address, |
| 1112 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 1112 | }; | 1113 | }; |
| 1113 | 1114 | ||
| 1114 | /* | 1115 | /* |
| @@ -1146,6 +1147,7 @@ static void baycom_probe(struct net_device *dev) | |||
| 1146 | dev->header_ops = &ax25_header_ops; | 1147 | dev->header_ops = &ax25_header_ops; |
| 1147 | 1148 | ||
| 1148 | dev->type = ARPHRD_AX25; /* AF_AX25 device */ | 1149 | dev->type = ARPHRD_AX25; /* AF_AX25 device */ |
| 1150 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 1149 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; | 1151 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; |
| 1150 | dev->mtu = AX25_DEF_PACLEN; /* eth_mtu is the default */ | 1152 | dev->mtu = AX25_DEF_PACLEN; /* eth_mtu is the default */ |
| 1151 | dev->addr_len = AX25_ADDR_LEN; /* sizeof an ax.25 address */ | 1153 | dev->addr_len = AX25_ADDR_LEN; /* sizeof an ax.25 address */ |
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c index c2894e43840e..bce105b16ed0 100644 --- a/drivers/net/hamradio/bpqether.c +++ b/drivers/net/hamradio/bpqether.c | |||
| @@ -469,6 +469,7 @@ static const struct net_device_ops bpq_netdev_ops = { | |||
| 469 | .ndo_start_xmit = bpq_xmit, | 469 | .ndo_start_xmit = bpq_xmit, |
| 470 | .ndo_set_mac_address = bpq_set_mac_address, | 470 | .ndo_set_mac_address = bpq_set_mac_address, |
| 471 | .ndo_do_ioctl = bpq_ioctl, | 471 | .ndo_do_ioctl = bpq_ioctl, |
| 472 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 472 | }; | 473 | }; |
| 473 | 474 | ||
| 474 | static void bpq_setup(struct net_device *dev) | 475 | static void bpq_setup(struct net_device *dev) |
| @@ -486,6 +487,7 @@ static void bpq_setup(struct net_device *dev) | |||
| 486 | #endif | 487 | #endif |
| 487 | 488 | ||
| 488 | dev->type = ARPHRD_AX25; | 489 | dev->type = ARPHRD_AX25; |
| 490 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 489 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; | 491 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; |
| 490 | dev->mtu = AX25_DEF_PACLEN; | 492 | dev->mtu = AX25_DEF_PACLEN; |
| 491 | dev->addr_len = AX25_ADDR_LEN; | 493 | dev->addr_len = AX25_ADDR_LEN; |
diff --git a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c index 0fad408f24aa..abab7be77406 100644 --- a/drivers/net/hamradio/dmascc.c +++ b/drivers/net/hamradio/dmascc.c | |||
| @@ -433,6 +433,7 @@ module_exit(dmascc_exit); | |||
| 433 | static void __init dev_setup(struct net_device *dev) | 433 | static void __init dev_setup(struct net_device *dev) |
| 434 | { | 434 | { |
| 435 | dev->type = ARPHRD_AX25; | 435 | dev->type = ARPHRD_AX25; |
| 436 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 436 | dev->hard_header_len = AX25_MAX_HEADER_LEN; | 437 | dev->hard_header_len = AX25_MAX_HEADER_LEN; |
| 437 | dev->mtu = 1500; | 438 | dev->mtu = 1500; |
| 438 | dev->addr_len = AX25_ADDR_LEN; | 439 | dev->addr_len = AX25_ADDR_LEN; |
| @@ -447,6 +448,7 @@ static const struct net_device_ops scc_netdev_ops = { | |||
| 447 | .ndo_start_xmit = scc_send_packet, | 448 | .ndo_start_xmit = scc_send_packet, |
| 448 | .ndo_do_ioctl = scc_ioctl, | 449 | .ndo_do_ioctl = scc_ioctl, |
| 449 | .ndo_set_mac_address = scc_set_mac_address, | 450 | .ndo_set_mac_address = scc_set_mac_address, |
| 451 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 450 | }; | 452 | }; |
| 451 | 453 | ||
| 452 | static int __init setup_adapter(int card_base, int type, int n) | 454 | static int __init setup_adapter(int card_base, int type, int n) |
diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c index c67a27245072..435868a7b69c 100644 --- a/drivers/net/hamradio/hdlcdrv.c +++ b/drivers/net/hamradio/hdlcdrv.c | |||
| @@ -626,6 +626,7 @@ static const struct net_device_ops hdlcdrv_netdev = { | |||
| 626 | .ndo_start_xmit = hdlcdrv_send_packet, | 626 | .ndo_start_xmit = hdlcdrv_send_packet, |
| 627 | .ndo_do_ioctl = hdlcdrv_ioctl, | 627 | .ndo_do_ioctl = hdlcdrv_ioctl, |
| 628 | .ndo_set_mac_address = hdlcdrv_set_mac_address, | 628 | .ndo_set_mac_address = hdlcdrv_set_mac_address, |
| 629 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 629 | }; | 630 | }; |
| 630 | 631 | ||
| 631 | /* | 632 | /* |
| @@ -676,6 +677,7 @@ static void hdlcdrv_setup(struct net_device *dev) | |||
| 676 | dev->header_ops = &ax25_header_ops; | 677 | dev->header_ops = &ax25_header_ops; |
| 677 | 678 | ||
| 678 | dev->type = ARPHRD_AX25; /* AF_AX25 device */ | 679 | dev->type = ARPHRD_AX25; /* AF_AX25 device */ |
| 680 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 679 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; | 681 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; |
| 680 | dev->mtu = AX25_DEF_PACLEN; /* eth_mtu is the default */ | 682 | dev->mtu = AX25_DEF_PACLEN; /* eth_mtu is the default */ |
| 681 | dev->addr_len = AX25_ADDR_LEN; /* sizeof an ax.25 address */ | 683 | dev->addr_len = AX25_ADDR_LEN; /* sizeof an ax.25 address */ |
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c index e37c8d515ce8..c12ec2c2b594 100644 --- a/drivers/net/hamradio/mkiss.c +++ b/drivers/net/hamradio/mkiss.c | |||
| @@ -641,6 +641,7 @@ static const struct net_device_ops ax_netdev_ops = { | |||
| 641 | .ndo_stop = ax_close, | 641 | .ndo_stop = ax_close, |
| 642 | .ndo_start_xmit = ax_xmit, | 642 | .ndo_start_xmit = ax_xmit, |
| 643 | .ndo_set_mac_address = ax_set_mac_address, | 643 | .ndo_set_mac_address = ax_set_mac_address, |
| 644 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 644 | }; | 645 | }; |
| 645 | 646 | ||
| 646 | static void ax_setup(struct net_device *dev) | 647 | static void ax_setup(struct net_device *dev) |
| @@ -650,6 +651,7 @@ static void ax_setup(struct net_device *dev) | |||
| 650 | dev->hard_header_len = 0; | 651 | dev->hard_header_len = 0; |
| 651 | dev->addr_len = 0; | 652 | dev->addr_len = 0; |
| 652 | dev->type = ARPHRD_AX25; | 653 | dev->type = ARPHRD_AX25; |
| 654 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 653 | dev->tx_queue_len = 10; | 655 | dev->tx_queue_len = 10; |
| 654 | dev->header_ops = &ax25_header_ops; | 656 | dev->header_ops = &ax25_header_ops; |
| 655 | dev->netdev_ops = &ax_netdev_ops; | 657 | dev->netdev_ops = &ax_netdev_ops; |
diff --git a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c index 57be9e0e98a6..b305f51eb420 100644 --- a/drivers/net/hamradio/scc.c +++ b/drivers/net/hamradio/scc.c | |||
| @@ -1550,6 +1550,7 @@ static const struct net_device_ops scc_netdev_ops = { | |||
| 1550 | .ndo_set_mac_address = scc_net_set_mac_address, | 1550 | .ndo_set_mac_address = scc_net_set_mac_address, |
| 1551 | .ndo_get_stats = scc_net_get_stats, | 1551 | .ndo_get_stats = scc_net_get_stats, |
| 1552 | .ndo_do_ioctl = scc_net_ioctl, | 1552 | .ndo_do_ioctl = scc_net_ioctl, |
| 1553 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 1553 | }; | 1554 | }; |
| 1554 | 1555 | ||
| 1555 | /* ----> Initialize device <----- */ | 1556 | /* ----> Initialize device <----- */ |
| @@ -1567,6 +1568,7 @@ static void scc_net_setup(struct net_device *dev) | |||
| 1567 | dev->flags = 0; | 1568 | dev->flags = 0; |
| 1568 | 1569 | ||
| 1569 | dev->type = ARPHRD_AX25; | 1570 | dev->type = ARPHRD_AX25; |
| 1571 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 1570 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; | 1572 | dev->hard_header_len = AX25_MAX_HEADER_LEN + AX25_BPQ_HEADER_LEN; |
| 1571 | dev->mtu = AX25_DEF_PACLEN; | 1573 | dev->mtu = AX25_DEF_PACLEN; |
| 1572 | dev->addr_len = AX25_ADDR_LEN; | 1574 | dev->addr_len = AX25_ADDR_LEN; |
diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c index 717433cfb81d..89d9da7a0c51 100644 --- a/drivers/net/hamradio/yam.c +++ b/drivers/net/hamradio/yam.c | |||
| @@ -1100,6 +1100,7 @@ static const struct net_device_ops yam_netdev_ops = { | |||
| 1100 | .ndo_start_xmit = yam_send_packet, | 1100 | .ndo_start_xmit = yam_send_packet, |
| 1101 | .ndo_do_ioctl = yam_ioctl, | 1101 | .ndo_do_ioctl = yam_ioctl, |
| 1102 | .ndo_set_mac_address = yam_set_mac_address, | 1102 | .ndo_set_mac_address = yam_set_mac_address, |
| 1103 | .ndo_neigh_construct = ax25_neigh_construct, | ||
| 1103 | }; | 1104 | }; |
| 1104 | 1105 | ||
| 1105 | static void yam_setup(struct net_device *dev) | 1106 | static void yam_setup(struct net_device *dev) |
| @@ -1128,6 +1129,7 @@ static void yam_setup(struct net_device *dev) | |||
| 1128 | dev->header_ops = &ax25_header_ops; | 1129 | dev->header_ops = &ax25_header_ops; |
| 1129 | 1130 | ||
| 1130 | dev->type = ARPHRD_AX25; | 1131 | dev->type = ARPHRD_AX25; |
| 1132 | dev->neigh_priv_len = sizeof(struct ax25_neigh_priv); | ||
| 1131 | dev->hard_header_len = AX25_MAX_HEADER_LEN; | 1133 | dev->hard_header_len = AX25_MAX_HEADER_LEN; |
| 1132 | dev->mtu = AX25_MTU; | 1134 | dev->mtu = AX25_MTU; |
