Linux内核实践 - 如何添加网络协议[二]:实现
发布时间:2016-10-08 04:50:34 所属栏目: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, }; (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读