专栏底层软件J3 中 TSN 的配置和使用

J3 中 TSN 的配置和使用

已解决
最初的梦想2023-01-16
65
5

在梳理 J3 以太网驱动的时候,发现 TSN 的一些配置是在 struct net_device_ops xj3_netdev_ops 结构体中的 xj3_tsn_link_configure 函数中实现的,先存在以下疑问:

(1)TSN 的配置是需要在 应用程序 中调用 API 来发起的吗?

(2)TSN 的配置需要哪些步骤?分别需要调用哪些 API?

另外:

我发现J3的驱动中,并没有使能通过硬件来往 tx packet 中插入 VLAN Tag,而是通过软件来实现的,为啥不用硬件自带的功能呢?

底层软件
评论1
0/1000
  • 疯狂星期6
    Lv.1

    您好:

    TSN包含多个功能,您指的是哪一个?CBS?EST?

    您在J3上试下ethtool,看看有没有相关的命令。ethtool -h看下

    2023-01-16
    0
    4
    • 最初的梦想回复疯狂星期6:

      您好:

      我在 J3 上试了 ethtool -h 命令,里面支持的命令有限,不包含设置 CBS 和 EST 的命令。

      另外,我有以下疑问:

      (1)J3 为啥不使用硬件插入 VLAN Tag 的功能,而用软件来实现?

      (2)我在J3的以太网驱动里面 open 函数中向 MAC_TxQ_Prty_Map0 寄存器(offset: 0x98)写入配置值给各个Tx Queue 指定优先级,结果读出来的是 0x00,请问这是什么原因?
      2023-01-17
      0
    • 疯狂星期6回复最初的梦想:

      您好:

      J3上的ethtool应该也可以设置ethtool的。我们在J3上有做类似的测试。

      EST功能测试:

      需要借助一个脚本,脚本如下:

      在J3上执行这个:

      ./ethtoolst_gmac --set-est eth0 est onfile./est.cfg

      可以看到正常报文(ping)将无法通信。

      2023-01-17
      0
    • 疯狂星期6回复最初的梦想:

      关于你提的两个问题:

      (1):我们暂时没有接到类似的需求,故没有实现。

      (2):关于这个寄存器需要后面再看下。

      2023-01-17
      0
    • 最初的梦想回复疯狂星期6:

      您好!

      (1)我的 J3 SDK 里面没有提供 ethtool 这个应用程序(即我的 /userdata 目录下没有这个app);

      (2)我自己写了一个测试程序,按照 est.cfg 的数据来填充了一个 struct xj3_est_cfg 结构体,并用这个结构体通过 ioctl 函数来设置 J3 的 EST,结果发现这个配置无效,相关代码如下:

      ......

      struct ifreq ifstruct;

      struct xj3_est_cfg test_est_cfg;

      test_est_cfg.cmd = 0x00000006;

      test_est_cfg.enabled = 1;

      test_est_cfg.btr_offset[0] = 0;

      test_est_cfg.btr_offset[1] = 2;

      test_est_cfg.ctr[0] = 100000000; // 100 ms

      test_est_cfg.ctr[0] = 0;

      test_est_cfg.ter = 0;

      test_est_cfg.gcl_size = 11;

      test_est_cfg.gcl[0] = 0x08989680; //对应于 ENTRY 1 0 0 0 10000000

      test_est_cfg.gcl[1] = 0x00989680; //对应于 ENTRY 0 0 0 0 10000000

      test_est_cfg.gcl[2] = 0x00989680;

      test_est_cfg.gcl[3] = 0x00989680;

      test_est_cfg.gcl[4] = 0x00989680;

      test_est_cfg.gcl[5] = 0x00989680;

      test_est_cfg.gcl[6] = 0x00989680;

      test_est_cfg.gcl[7] = 0x00989680;

      test_est_cfg.gcl[8] = 0x00989680;

      test_est_cfg.gcl[9] = 0x00989680;

      test_est_cfg.gcl[10] = 0x00989680;

      ifstruct.ifr_data = (void *)(&test_est_cfg);

      ......

      ioctl(rawsock, 0x89F0, &ifstruct); // 这个会最终调用J3 以太网驱动里面的 xj3_set_est() 函数

      在完成上面配置以后,我的测试程序会往 Tx Queue 0/1/2/3 这 4 个队列里面发数据,结果通过 tcpdump 工具发现 4 个 Tx Queue 都有数据发送出来,而预期是经过 EST 控制后,仅有 Tx Queue 3有数据发送出来。
      所以我想问,是我这配置填充不对(我个人感觉配置按结构体去填的,应该没啥问题。如果填充不对,该怎么填?),还是 J3 的以太网驱动不支持 EST?
      2023-01-30
      0