Linux内核实践 - 如何添加网络协议[二]:实现
发布时间:2016-10-08 05:05:56 所属栏目:Linux 来源:站长网
导读:副标题#e# 内核版本:2.6.34 实现思路: 报文在网络协议栈中的流动,对于接收来讲,是 对报文的脱壳的过程,由于报文是已知的输入,只要逐个解析协议号;对于发送来讲,是各层发送函数的嵌套调用,由于没有已 知的输入,只能按事先设计好的协议进行层层构造
创建一种设备时,一定 会有设备的XXX_setup()初始化,大部分设备都会用ether_setup()来作初始化,再进行适当更改。下面是brcm_setup(): void brcm_setup(struct net_device *dev) { ether_setup(dev); dev->priv_flags |= IFF_BRCM_TAG; dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; dev->tx_queue_len = 0; dev->netdev_ops = &brcm_netdev_ops; dev->destructor = free_netdev; dev->ethtool_ops = &brcm_ethtool_ops; memset(dev->broadcast, 0, ETH_ALEN); } 其中发送函数就在brcm_netdev_ops中,每层设备都会这样调用:dev->netdev_ops->ndo_start_xmit()。 static const struct net_device_ops brcm_netdev_ops = { .ndo_change_mtu = brcm_dev_change_mtu, .ndo_init = brcm_dev_init, .ndo_uninit = brcm_dev_uninit, .ndo_open = brcm_dev_open, .ndo_stop = brcm_dev_stop, .ndo_start_xmit = brcm_dev_hard_start_xmit, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = brcm_dev_set_mac_address, .ndo_set_rx_mode = brcm_dev_set_rx_mode, .ndo_set_multicast_list = brcm_dev_set_rx_mode, .ndo_change_rx_flags = brcm_dev_change_rx_flags, //.ndo_do_ioctl = brcm_dev_ioctl, .ndo_neigh_setup = brcm_dev_neigh_setup, .ndo_get_stats = brcm_dev_get_stats, }; (编辑:天津站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 老手柄真废了?Switch/PC无线手柄转接器将发售
- ruby – 什么是一个很好的开源软件包,用于在大型Rails站点上
- 怎样优雅的将Docker Registry中容器镜像迁移至Harbor
- Linux学习笔记之Python3的安装以及创建虚拟环境(CentOS)
- 一键轻松恢复iPhone或iPad丢失数据的方法
- 如何使用SELinux策略限制对私有ssh密钥的访问?
- 美图秀秀移动端用户超3亿 安卓版喜获年度十佳软件奖!
- The path "/usr/bin/gcc" is not valid path to the gcc
- 湖南卫视呼啦怎么用?呼啦怎么注册?
- linux – 在RPI上使用cec-client关闭电视