diff options
Diffstat (limited to 'drivers/net/ppp/ppp_generic.c')
| -rw-r--r-- | drivers/net/ppp/ppp_generic.c | 22 | 
1 files changed, 22 insertions, 0 deletions
| diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c index d445ecb1d0c7..930e49ef15f6 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -1560,12 +1560,34 @@ static void ppp_dev_priv_destructor(struct net_device *dev)  		ppp_destroy_interface(ppp);  } +static int ppp_fill_forward_path(struct net_device_path_ctx *ctx, +				 struct net_device_path *path) +{ +	struct ppp *ppp = netdev_priv(ctx->dev); +	struct ppp_channel *chan; +	struct channel *pch; + +	if (ppp->flags & SC_MULTILINK) +		return -EOPNOTSUPP; + +	if (list_empty(&ppp->channels)) +		return -ENODEV; + +	pch = list_first_entry(&ppp->channels, struct channel, clist); +	chan = pch->chan; +	if (!chan->ops->fill_forward_path) +		return -EOPNOTSUPP; + +	return chan->ops->fill_forward_path(ctx, path, chan); +} +  static const struct net_device_ops ppp_netdev_ops = {  	.ndo_init	 = ppp_dev_init,  	.ndo_uninit      = ppp_dev_uninit,  	.ndo_start_xmit  = ppp_start_xmit,  	.ndo_do_ioctl    = ppp_net_ioctl,  	.ndo_get_stats64 = ppp_get_stats64, +	.ndo_fill_forward_path = ppp_fill_forward_path,  };  static struct device_type ppp_type = { | 
