This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA2PXEVM:如何创建两个 VLAN 套接字来绑定相同的 IP 但不同的 VLAN-id?

Guru**** 2012440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/765670/tda2pxevm-how-to-create-two-vlan-socket-that-bind-same-ip-but-different-vlan-id

器件型号:TDA2PXEVM

[TDA2PX]如何创建两个 VLAN 套接字,以绑定相同的 IP 但不同的 VLAN-id? (TI-RTOS)

我们已经通过 VLANAddDevice 添加了两个 VLAN、VLAN 的默认用法是绑定到不同的 IP 地址、我们还使用不同的 VLAN ID 套接字发送数据成功、这些套接字绑定到不同的 IP 地址

但是,我们需要创建两个 VLAN 套接字,该套接字具有绑定相同 IP 地址的不同 VLAN-id,并且此配置失败

1.我们需要在 VLAN id 5上使用 IP 发送 RTP ("198.18.36.96")
2.我们需要使用 IP 在 VLAN id 12上发送其他数据("198.18.36.96")
但是 NDK 似乎不支持两个配置同时工作、我们无法创建一个用于发送 RTP 的套接字(vlan5)、而创建另一个(vlan12)用于发送数据、那么如何解决这个问题?

代码:

m_eth_Elan = 1;
int m_eth_vlan5 = eth_vlan_add (5、2);
int m_eth_vlan12 = eth_vlan_add (12、0);
nt_print ("m_eth_Elan (实端口):%d m_eth_vlan5 (VLAN 端口):%d m_eth_vlan12 (VLAN 端口):%d"、m_eth_elan、m_eth_vlan5、m_eth_vlan12);

ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);

日志

网络会话开始
ETH_VLAN_add tagid:5优先级:2.
ETH_VLAN_add VLANAddDevice ret:2.
ETH_VLAN_add tagid:12优先级:0
ETH_VLAN_add VLANAddDevice ret:3.
m_eth_Elan (实端口):1 m_eth_vlan5 (VLAN 端口):2 m_eth_vlan12 (VLAN 端口):3ifconfig 索引:1名称:eth0 MTU:1500 addr:198.18.36.96 mask:255.255.0.0
ifconfig eth 索引:1成功
ifconfig eth 索引:2名称:eth0:5 MTU:1496 addr:198.18.36.96掩码:255.255.0.0
ifconfig eth 索引:2 CfgAddEntry 失败、ret_code:-101
ifconfig eth 索引:3名称:eth0:12 MTU :1496 addr:198.18.36.96掩码:255.255.0.0
ifconfig eth 索引:3 CfgAddEntry 失败、ret_code:-101

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代码
    m_eth_Elan = 1;
    int m_eth_vlan5 = eth_vlan_add (5、2);
    int m_eth_vlan12 = eth_vlan_add (12、0);
    nt_print ("m_eth_Elan (实端口):%d m_eth_vlan5 (VLAN 端口):%d m_eth_vlan12 (VLAN 端口):%d\n"、m_eth_elan、m_eth_vlan5、m_eth_vlan12);

    ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.18.5.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.18.12.96")、(uint8_t*)("255.255.0.0)、NULL);

    日志
    ETH_VLAN_add tagid:5优先级:2.
    ETH_VLAN_add VLANAddDevice ret:2.
    ETH_VLAN_add tagid:12优先级:0
    ETH_VLAN_add VLANAddDevice ret:3.
    m_eth_Elan (实端口):1 m_eth_vlan5 (VLAN 端口):2 m_eth_vlan12 (VLAN 端口):3
    ifconfig eth 索引:1名称:eth0 MTU:1500 addr:198.18.36.96 mask:255.255.0.0
    ifconfig eth 索引:1成功
    ifconfig eth 索引:2名称:eth0:5 MTU:1496 addr:198.18.5.96掩码:255.255.0.0
    ifconfig eth 索引:2 CfgAddEntry 失败、ret_code:-101
    ifconfig eth 索引:3名称:eth0:12 MTU :1496 addr:198.18.12.96掩码:255.255.0.0
    ifconfig eth 索引:3 CfgAddEntry 失败、ret_code:-101
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代码
    m_eth_Elan = 1;
    int m_eth_vlan5 = eth_vlan_add (5、2);
    int m_eth_vlan12 = eth_vlan_add (12、0);
    nt_print ("m_eth_Elan (实端口):%d m_eth_vlan5 (VLAN 端口):%d m_eth_vlan12 (VLAN 端口):%d\n"、m_eth_elan、m_eth_vlan5、m_eth_vlan12);

    ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.12.36.96")、(uint8_t*)("255.255.0.0)、NULL);


    日志

    ETH_VLAN_add tagid:5优先级:2.
    ETH_VLAN_add VLANAddDevice ret:2.
    ETH_VLAN_add tagid:12优先级:0
    ETH_VLAN_add VLANAddDevice ret:3.
    m_eth_Elan (实端口):1 m_eth_vlan5 (VLAN 端口):2 m_eth_vlan12 (VLAN 端口):3
    ifconfig eth 索引:1名称:eth0 MTU:1500 addr:198.18.36.96 mask:255.255.0.0
    ifconfig eth 索引:1成功
    ifconfig eth 索引:2名称:eth0:5 MTU:1496 addr:198.5.36.96掩码:255.255.0.0
    ifconfig eth index:2成功
    ifconfig eth 索引:3名称:eth0:12 MTU :1496 addr:198.12.36.96掩码:255.255.0.0
    ifconfig eth 索引:3成功
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mi Zhou:

    我认为 NDK 中支持这一点所需的更改将非常大。 我会就这项工作的可行性咨询我们的专家、并与您联系。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mi Zhou:

    我们可以将多个 VLAN 设备连接到单个 NIMU IF。 VLANAddDevice() API 将 Nimu 用作参数。 因此、您应该不会遇到任何问题。 无论如何,为了澄清,您使用的函数 eth_vla_add()是否是自定义函数? 如果是、您能否告诉我函数签名是什么、即、函数采用了哪些参数? 我相信它是 VLANAddDevice() API 的包装程序?

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mi Zhou:

    很久没听到过你的声音! 我假设您能够解决您的问题。 请告诉我状态,以便我可以关闭该主题:)

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Anand
    ETH_VLAN_add 是 baseon VLANAddDevice、这不会出现问题、但添加 VLAN 接口后、两个 valn 接口和一个真实接口无法共享同一个 IP 地址、请仔细检查上面我的三个示例日志!

    我希望这三个接口在同一子网中使用相同的 IP "198.18.36.96"、但它似乎失败了。


    ===================
    ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);

    ifconfig eth 索引:1名称:eth0 MTU:1500 addr:198.18.36.96 mask:255.255.0.0
    ifconfig eth 索引:1成功
    ifconfig eth 索引:2名称:eth0:5 MTU:1496 addr:198.18.36.96掩码:255.255.0.0
    ifconfig eth 索引:2 CfgAddEntry 失败、ret_code:-101
    ifconfig eth 索引:3名称:eth0:12 MTU :1496 addr:198.18.36.96掩码:255.255.0.0
    ifconfig eth 索引:3 CfgAddEntry 失败、ret_code:-101
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Anand
    ETH_VLAN_add 是 baseon VLANAddDevice、这不会出现问题、但添加 VLAN 接口后、两个 valn 接口和一个真实接口无法共享同一个 IP 地址、请仔细检查上面我的三个示例日志!

    我希望这三个接口在同一子网中使用相同的 IP "198.18.36.96"、但它似乎失败了。


    ===================
    ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);

    ifconfig eth 索引:1名称:eth0 MTU:1500 addr:198.18.36.96 mask:255.255.0.0
    ifconfig eth 索引:1成功
    ifconfig eth 索引:2名称:eth0:5 MTU:1496 addr:198.18.36.96掩码:255.255.0.0
    ifconfig eth 索引:2 CfgAddEntry 失败、ret_code:-101
    ifconfig eth 索引:3名称:eth0:12 MTU :1496 addr:198.18.36.96掩码:255.255.0.0
    ifconfig eth 索引:3 CfgAddEntry 失败、ret_code:-101
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mi Zhou:

    从日志中、显示 ifconfig eth 索引:1、2、3等 如果您尝试将 VLAN 接口添加到具有单个 IP 的单个接口索引,您是否应该为所有接口都添加相同的索引? 还是只是一个环路变量? 如果我错了、请纠正我的问题、但我看不到您在哪里配置 VLAN 接口与特定的 NIMU 对应。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Anand
    如何将 VLAN 接口配置到 NIMU IF? 在示例3中、我只为该设备分配不同的子网 IP 地址、配置成功、因此我认为如果我创建 VLAN 设备、也会创建 NIMU IF。

    ===========================================================================================================
    我首先在实际设备上创建 VLAN 设备、然后将 IP 地址分配给创建的设备、您的答案(使用 VLANAddDevice)只是创建 VLAN 设备、而不是将 IP 地址分配给设备

    首先在实 Mac 端口索引1上创建 VLANx (在我的点视图中、实索引是指您的硬件连接的端口号、如果您连接到另一个 Mac 端口、索引是0)、如果创建成功、我可以获取 VLAN 设备索引 baseon 实端口索引、 然后使用每个设备索引配置 IP 地址。

    ===========================================================================================================
    代码

    m_eth_Elan = 1;=>这是真实的硬件 Mac 索引1,这意味着我使用真实的 Mac 索引
    int m_eth_vlan5 = eth_vlan_add (5、2);=>使用 VLANAddDevice 在实索引1中添加 VLAN 5、然后返回 vlan5的索引2 (增加 baseon 1)
    int m_eth_vlan12 = eth_vlan_add (12、0);=>相同的添加 VLAN 12 baseon 实数索引1、然后返回 vlan12的索引3 (增加 baseon 2)

    //打印所有设备索引
    nt_print ("m_eth_Elan (实端口):%d m_eth_vlan5 (VLAN 端口):%d m_eth_vlan12 (VLAN 端口):%d"、m_eth_elan、m_eth_vlan5、m_eth_vlan12);

    //配置索引为1的实端口 IP 地址
    ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);

    //config vlan5端口 IP 地址、索引为2
    ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);

    //config vlan12端口 IP 地址、索引为3
    ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);

    ================================================================================
    日志

    //添加 VLAN 成功
    ETH_VLAN_add tagid:5优先级:2.
    ETH_VLAN_add VLANAddDevice ret:2.
    ETH_VLAN_add tagid:12优先级:0
    ETH_VLAN_add VLANAddDevice ret:3.

    //ifconfig 实端口索引1成功
    m_eth_Elan (实端口):1 m_eth_vlan5 (VLAN 端口):2 m_eth_vlan12 (VLAN 端口):3ifconfig 索引:1名称:eth0 MTU:1500 addr:198.18.36.96 mask:255.255.0.0
    ifconfig eth 索引:1成功

    //ifconfig vlan5端口索引2失败
    ifconfig eth 索引:2名称:eth0:5 MTU:1496 addr:198.18.36.96掩码:255.255.0.0
    ifconfig eth 索引:2 CfgAddEntry 失败、ret_code:-101

    //ifconfig vlan12端口索引3失败
    ifconfig eth 索引:3名称:eth0:12 MTU :1496 addr:198.18.36.96掩码:255.255.0.0
    ifconfig eth 索引:3 CfgAddEntry 失败、ret_code:-101

    ===========================================================================================================
    上述日志失败,如果我按以下方式配置(differnet 子网 IP 地址),则为 buf,配置成功
    ETH_DEV_ifconfig (m_eth_Elan、(uint8_t*)("198.18.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan5、(uint8_t*)("198.36.96")、(uint8_t*)("255.255.0.0)、NULL);
    ETH_DEV_ifconfig (m_eth_vlan12、(uint8_t*)("198.12.36.96")、(uint8_t*)("255.255.0.0)、NULL);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mi Zhou:

    在您的方法中,您将为您创建的每个 VLAN 设备创建一个 NIMU IF。 这就不符合将 VLAN 接口连接到具有单个 IP 的单个接口的目的。 相反,创建 VLAN ID,然后使用 VLANAddDevice() API 将 VLAN 设备添加到 NIMU IF。 如果先单独配置单个 NIMU 的 IP 地址、然后执行 VLAN 任务。 我不确定为什么要在已经可用的 API 之上使用包装程序。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Anand
    ===========================================================================================================
    相反,创建 VLAN ID,然后使用 VLANAddDevice() API 将 VLAN 设备添加到 NIMU IF
    我不创建 VLAN ID、VLAN ID 是[VLANAddDevice]的返回值

    ===========================================================================================================
    我不确定为什么要在已经可用的 API 之上使用包装程序
    我使用封装器是因为我要将这些 API 用作模块、实际上、所有代码都是从 NDK、[eth_vlan_add]调用[VLANAddDevice]和[eth_dev_ifconfig]调用[CfgAddEntry]中复制的、您可以从日志中看到这一点。

    ===========================================================================================================
    无论我使用什么代码、我只想在具有相同 IP 地址的不同 VLAN 中创建不同的套接字、您能提供示例代码吗?
    1.我们需要在 VLAN id 5上发送 RTP,并使用 ip ("198.18.36.96")=>套接字数据包必须包含 VLAN tagid 5
    2.我们需要使用 ip ("198.18.36.96")=>套接字数据包必须包含 VLAN tagid 12,在 VLAN id 12上发送其他数据
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anand、您好!

    您能否帮助提供建议设置步骤的示例代码? 如果您成功测试了此设置、则会更好、更有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yong、

    我认为最好先尝试一下这项建议,因为我们还没有测试这项功能。 此外、由于您使用的是包装程序 API、我不确定示例代码是否有用。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Anand、您好!
    以下是一些可能有助于实现以下目的的信息:
    1) eth_vlan_add() API 是 NDK_2_24_02_31/packages/ti/ndk/tools/console/convlan.c 中 CmdlVLANAdd() API 的副本
    2) eth_vla_add()每次调用 VLAN 设备时都尝试将其添加到单个源接口。 其参数为 i) vlan id 和 ii) priority。

    因此、我们尝试使用相同的源接口创建两个 VLAN 设备、然后为其分配 IP 地址。

    您是否可以根据 convlan.c 中的 API 创建测试函数、以演示如何在同一 IP 地址上创建多个 VLAN ID。

    非常感谢、
    Ravikant
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Ravikant:

    您可以直接使用 VLANAddDevice(),而不是调用 CmdVLANAdd(),它采用 src_index、vla_id 和 priority 等 此外,即使在添加 VLAN 设备之前,也可以单独分配 IP 地址。 请勿使用 CfgAddEntry 分配 IP。 API 会创建一个新接口。 我认为 IP 的分配已经得到了关注。 因此可以调用 VLANAddDevice(),使用 src_index,即0表示不同的 VLAN ID 将不同的设备连接到同一 IP。 我将尝试在我的一侧重现设置、并尝试它。

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道,这一问题正在其他支持手段中讨论。 让我们继续讨论这里的问题。

    此致、
    Anand