123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- From: Subhra Banerjee <[email protected]>
- Date: Fri, 31 Aug 2018 12:01:19 +0530
- Subject: [PATCH] UGW_SW-29163: ATM oam support
- --- a/drivers/net/ppp/ppp_generic.c
- +++ b/drivers/net/ppp/ppp_generic.c
- @@ -2953,6 +2953,22 @@ char *ppp_dev_name(struct ppp_channel *c
- return name;
- }
-
- +/*
- + * Return the PPP device interface pointer
- + */
- +struct net_device *ppp_device(struct ppp_channel *chan)
- +{
- + struct channel *pch = chan->ppp;
- + struct net_device *dev = NULL;
- +
- + if (pch) {
- + read_lock_bh(&pch->upl);
- + if (pch->ppp && pch->ppp->dev)
- + dev = pch->ppp->dev;
- + read_unlock_bh(&pch->upl);
- + }
- + return dev;
- +}
-
- /*
- * Disconnect a channel from the generic layer.
- @@ -3599,6 +3615,7 @@ EXPORT_SYMBOL(ppp_unregister_channel);
- EXPORT_SYMBOL(ppp_channel_index);
- EXPORT_SYMBOL(ppp_unit_number);
- EXPORT_SYMBOL(ppp_dev_name);
- +EXPORT_SYMBOL(ppp_device);
- EXPORT_SYMBOL(ppp_input);
- EXPORT_SYMBOL(ppp_input_error);
- EXPORT_SYMBOL(ppp_output_wakeup);
- --- a/include/linux/ppp_channel.h
- +++ b/include/linux/ppp_channel.h
- @@ -76,6 +76,9 @@ extern int ppp_unit_number(struct ppp_ch
- /* Get the device name associated with a channel, or NULL if none */
- extern char *ppp_dev_name(struct ppp_channel *);
-
- +/* Get the device pointer associated with a channel, or NULL if none */
- +extern struct net_device *ppp_device(struct ppp_channel *);
- +
- /*
- * SMP locking notes:
- * The channel code must ensure that when it calls ppp_unregister_channel,
- --- a/net/atm/Kconfig
- +++ b/net/atm/Kconfig
- @@ -56,6 +56,12 @@ config ATM_MPOA
- subnetwork boundaries. These shortcut connections bypass routers
- enhancing overall network performance.
-
- +config ATM_MPOA_INTEL_DSL_PHY_SUPPORT
- + bool "Intel DSL Phy MPOA support"
- + depends on ATM && INET && ATM_MPOA!=n
- + help
- + Add support for Intel DSL Phy ATM MPOA
- +
- config ATM_BR2684
- tristate "RFC1483/2684 Bridged protocols"
- depends on ATM && INET
- --- a/net/atm/br2684.c
- +++ b/net/atm/br2684.c
- @@ -598,6 +598,11 @@ static int br2684_regvcc(struct atm_vcc
- atmvcc->push = br2684_push;
- atmvcc->pop = br2684_pop;
- atmvcc->release_cb = br2684_release_cb;
- +#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
- + if (atm_hook_mpoa_setup) /* IPoA or EoA w/o FCS */
- + atm_hook_mpoa_setup(atmvcc, brdev->payload == p_routed ? 3 : 0,
- + brvcc->encaps == BR2684_ENCAPS_LLC ? 1 : 0, net_dev);
- +#endif
- atmvcc->owner = THIS_MODULE;
-
- /* initialize netdev carrier state */
- --- a/net/atm/common.c
- +++ b/net/atm/common.c
- @@ -137,6 +137,11 @@ static struct proto vcc_proto = {
- .release_cb = vcc_release_cb,
- };
-
- +#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
- +void (*atm_hook_mpoa_setup)(struct atm_vcc *, int, int, struct net_device *) = NULL;
- +EXPORT_SYMBOL(atm_hook_mpoa_setup);
- +#endif
- +
- int vcc_create(struct net *net, struct socket *sock, int protocol, int family, int kern)
- {
- struct sock *sk;
- --- a/net/atm/common.h
- +++ b/net/atm/common.h
- @@ -53,4 +53,6 @@ int svc_change_qos(struct atm_vcc *vcc,s
-
- void atm_dev_release_vccs(struct atm_dev *dev);
-
- +extern void (*atm_hook_mpoa_setup)(struct atm_vcc *, int, int, struct net_device *);
- +
- #endif
- --- a/net/atm/mpc.c
- +++ b/net/atm/mpc.c
- @@ -31,6 +31,7 @@
- /* Modular too */
- #include <linux/module.h>
-
- +#include "common.h"
- #include "lec.h"
- #include "mpc.h"
- #include "resources.h"
- @@ -645,6 +646,10 @@ static int atm_mpoa_vcc_attach(struct at
- vcc->proto_data = mpc->dev;
- vcc->push = mpc_push;
-
- +#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
- + if (atm_hook_mpoa_setup) /* IPoA, LLC */
- + atm_hook_mpoa_setup(vcc, 3, 1, mpc->dev);
- +#endif
- return 0;
- }
-
- --- a/net/atm/pppoatm.c
- +++ b/net/atm/pppoatm.c
- @@ -422,6 +422,12 @@ static int pppoatm_assign_vcc(struct atm
- atmvcc->user_back = pvcc;
- atmvcc->push = pppoatm_push;
- atmvcc->pop = pppoatm_pop;
- +#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
- + if (atm_hook_mpoa_setup) /* PPPoA */
- + atm_hook_mpoa_setup(atmvcc, 2,
- + pvcc->encaps == e_llc ? 1 : 0,
- + ppp_device(&pvcc->chan));
- +#endif
- atmvcc->release_cb = pppoatm_release_cb;
- __module_get(THIS_MODULE);
- atmvcc->owner = THIS_MODULE;
|