⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 raw.c

📁 linux 内核源代码
💻 C
字号:
/* net/atm/raw.c - Raw AAL0 and AAL5 transports *//* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */#include <linux/module.h>#include <linux/atmdev.h>#include <linux/capability.h>#include <linux/kernel.h>#include <linux/skbuff.h>#include <linux/mm.h>#include "common.h"#include "protocols.h"/* * SKB == NULL indicates that the link is being closed */static void atm_push_raw(struct atm_vcc *vcc,struct sk_buff *skb){	if (skb) {		struct sock *sk = sk_atm(vcc);		skb_queue_tail(&sk->sk_receive_queue, skb);		sk->sk_data_ready(sk, skb->len);	}}static void atm_pop_raw(struct atm_vcc *vcc,struct sk_buff *skb){	struct sock *sk = sk_atm(vcc);	pr_debug("APopR (%d) %d -= %d\n", vcc->vci,		atomic_read(&sk->sk_wmem_alloc), skb->truesize);	atomic_sub(skb->truesize, &sk->sk_wmem_alloc);	dev_kfree_skb_any(skb);	sk->sk_write_space(sk);}static int atm_send_aal0(struct atm_vcc *vcc,struct sk_buff *skb){	/*	 * Note that if vpi/vci are _ANY or _UNSPEC the below will	 * still work	 */	if (!capable(CAP_NET_ADMIN) &&	    (((u32 *) skb->data)[0] & (ATM_HDR_VPI_MASK | ATM_HDR_VCI_MASK)) !=	    ((vcc->vpi << ATM_HDR_VPI_SHIFT) | (vcc->vci << ATM_HDR_VCI_SHIFT)))	    {		kfree_skb(skb);		return -EADDRNOTAVAIL;	}	return vcc->dev->ops->send(vcc,skb);}int atm_init_aal0(struct atm_vcc *vcc){	vcc->push = atm_push_raw;	vcc->pop = atm_pop_raw;	vcc->push_oam = NULL;	vcc->send = atm_send_aal0;	return 0;}int atm_init_aal34(struct atm_vcc *vcc){	vcc->push = atm_push_raw;	vcc->pop = atm_pop_raw;	vcc->push_oam = NULL;	vcc->send = vcc->dev->ops->send;	return 0;}int atm_init_aal5(struct atm_vcc *vcc){	vcc->push = atm_push_raw;	vcc->pop = atm_pop_raw;	vcc->push_oam = NULL;	vcc->send = vcc->dev->ops->send;	return 0;}EXPORT_SYMBOL(atm_init_aal5);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -