|
我研究过openwrt官方的ethernet和wireless驱动代码。似乎对于从有线发起的包,调用下列函数
- static int
- mtk_eth_setup_tc_block_cb(enum tc_setup_type type, void *type_data, void *cb_priv)
- {
- struct flow_cls_offload *cls = type_data;
- struct net_device *dev = cb_priv;
- struct mtk_mac *mac;
- struct mtk_eth *eth;
- mac = netdev_priv(dev);
- eth = mac->hw;
- if (!tc_can_offload(dev))
- return -EOPNOTSUPP;
- if (type != TC_SETUP_CLSFLOWER)
- return -EOPNOTSUPP;
- return mtk_flow_offload_cmd(eth, cls, 0);
- }
复制代码 其中mtk_flow_offload_cmd(eth, cls, 0) 第三个参数就是ppe的号码。这里写死是0.
对于从无线发起的包,调用下次函数
- static int
- mtk_wed_setup_tc_block_cb(enum tc_setup_type type, void *type_data, void *cb_priv)
- {
- struct mtk_wed_flow_block_priv *priv = cb_priv;
- struct flow_cls_offload *cls = type_data;
- struct mtk_wed_hw *hw = priv->hw;
- if (!tc_can_offload(priv->dev))
- return -EOPNOTSUPP;
- if (type != TC_SETUP_CLSFLOWER)
- return -EOPNOTSUPP;
- return mtk_flow_offload_cmd(hw->eth, cls, hw->index);
- }
复制代码 这里没有写死,是由一个hw->index决定。具体不知道怎么过来的。但实际测试,我加了打印,似乎hw->index一直是0.不管无线是2.4g还是5g。不知道你是否知道。
另外,你说MTK官网有示例代码,可以麻烦提供一下链接吗?
|
|