Пример #1
0
static int pvc_close(struct device *dev)
{
	pvc_device *pvc=dev_to_pvc(dev);
	pvc->state=0;

	if (!mode_is(pvc->master, MODE_SOFT) && pvc->master->close_pvc)
		pvc->master->close_pvc(pvc);

	pvc->master->lmi.state |= LINK_STATE_CHANGED;
	return 0;
}
Пример #2
0
static int pvc_xmit(struct sk_buff *skb, struct device *dev)
{
	pvc_device *pvc=dev_to_pvc(dev);

	if (pvc->state & PVC_STATE_ACTIVE) {
		skb->dev = hdlc_to_dev(pvc->master);
		pvc->stats.tx_bytes+=skb->len;
		pvc->stats.tx_packets++;
		dev_queue_xmit(skb);
	} else {
		pvc->stats.tx_dropped++;
		dev_kfree_skb(skb);
	}
  
	return 0;
}
Пример #3
0
static int pvc_xmit(struct sk_buff *skb, struct net_device *dev)
{
	pvc_device *pvc = dev_to_pvc(dev);

	if (pvc->state & PVC_STATE_ACTIVE) {
		skb->dev = hdlc_to_dev(pvc->master);
		pvc->stats.tx_bytes += skb->len;
		pvc->stats.tx_packets++;
		if (pvc->state & PVC_STATE_FECN)
			pvc->stats.tx_compressed++; /* TX Congestion counter */
		dev_queue_xmit(skb);
	} else {
		pvc->stats.tx_dropped++;
		dev_kfree_skb(skb);
	}

	return 0;
}
Пример #4
0
static int pvc_open(struct device *dev)
{
	pvc_device *pvc=dev_to_pvc(dev);
	int result=0;

	if ((hdlc_to_dev(pvc->master)->flags & IFF_UP) == 0)
		return -EIO;  /* Master must be UP in order to activate PVC */
  
	memset(&(pvc->stats), 0, sizeof(struct net_device_stats));
	pvc->state=0;

	if (!mode_is(pvc->master, MODE_SOFT) && pvc->master->open_pvc)
		result=pvc->master->open_pvc(pvc);
	if (result)
		return result;

	pvc->master->lmi.state |= LINK_STATE_CHANGED;
	return 0;
}
Пример #5
0
static struct net_device_stats *pvc_get_stats(struct device *dev)
{
	pvc_device *pvc=dev_to_pvc(dev);
	return &pvc->stats;
}