我正在尝试用ISO (0x00fe)协议类型编写一个IS-IS数据包到gretap接口。在本例中,没有以太网头,所以我使用原始套接字。gretap总是将0x6558作为GRE报头中的协议类型,是否有一种方法可以使gretap使用不同的协议类型(例如,0x00fe),以便接收方期望看到is -是否立即在GRE报头后看到数据包(即先没有以太网报头)?
跟进:
我认为协议类型是硬编码的,即(来自内核中的ip_gre.c ):
761 static netdev_tx_t gre_tap_xmit(struct sk_buff *skb,
762 struct net_device *dev)
763 {
...
776
777 __gre_xmit(skb, dev, &tunnel->parms.iph, htons(ETH_P_TEB));
778 return NETDEV_TX_OK;符号ETH_P_TEB是透明以太网桥类型(0x6558),因此没有设置此值的选项。这是不幸的,因为如果使用原始套接字,我们可能希望在GRE上生成不同的封装。我将尝试修改内核模块。
发布于 2023-03-19 06:14:15
看起来我可以使用IP接口和原始套接字来完成我想要的事情,而不是激怒。在这种情况下,协议类型是可设置的,使用在sendto()调用中传递的struct sockaddr_ll的sockaddr_ll字段,并且使用原始套接字允许控制封装。
https://unix.stackexchange.com/questions/740122
复制相似问题