TORCHAIR_INSTALL_DST
时间: 2023-08-07 15:02:48 浏览: 249
引用\[1\]:在使用netfilter框架中,在NF_IP_FORWARD点做钩子,并将钩到的包从指定的物理接口发出去的实现方法如下:
1. 首先,需要重新修改路由。可以使用以下代码来设置新的路由:
skb_dst_drop(skb);
skb_dst_set(skb, &newroute->dst);
这里的newroute是一个包含新路由信息的结构体。
2. 接下来,可以使用NF_HOOK函数来将包发送到指定的物理接口:
NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, NULL, skb_dst(skb)->dev, dst_output);
这里的skb是要发送的包,skb_dst(skb)->dev是指定的物理接口。
引用\[2\]:在netfilter框架中,对于输入报文处理或输出报文处理,如果命中了路由缓存条目,则会累积该路由缓存条目的引用计数和全局命中统计,并将路由缓存条目的核心内容赋给报文skb的_skb_dst字段。这个核心内容是rtable下的dst_entry,其中包含了出接口、邻居节点、下一步的处理函数等信息。通过修改skb的_skb_dst字段,可以实现从指定的物理接口出来。
引用\[3\]:在以太网帧的报文头格式中,最后两个字节表示以太网的类型。当这两个字节小于0x600时,表示该帧不是Ethernet II格式,而是802.2 LLC格式或其他格式。在OpenFlow和Open vSwitch中,只支持IEEE 802.3 SNAP格式的LLC头,即DSAP=0xaa、SSAP=0xaa、cntl=0x03,后面跟着一个5个字节大小的SNAP。当插入802.1Q头或在802.3 SNAP格式中插入802.1Q头时,eth_type/dl_type取自Ethertype字段。如果报文头不满足上述格式,OVS和OpenFlow会将eth_type/dl_type设为0x5ff(OFP_DL_TYPE_NOT_ETH_TYPE)。
综上所述,要实现在NF_IP_FORWARD点钩子中将钩到的包从指定的物理接口发出去,可以通过重新修改路由和设置skb的_skb_dst字段来实现。同时,需要注意报文的以太网帧格式和类型。
#### 引用[.reference_title]
- *1* *2* [skb_dst_set - struct dst_entry dst 路由子系统使用。](https://blog.csdn.net/tycoon1988/article/details/45487343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [Open vSwitch ETHERNET相关字段详解(eth_src/dl_src、eth_dst/dl_dst、eth_type/dl_type)](https://blog.csdn.net/u012124304/article/details/103227684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文