Hi Jijiang,
On 01/13/2015 04:04 AM, Liu, Jijiang wrote:
> the following two commands are.
>
> 1. tx_checksum set sw-tunnel-mode on/off
>
> 2. tx_checksum set hw-tunnel-mode on/off
>
> For command 1, If the sw-tunnel-mode is set/clear, which will set/clear a
> testpmd flag that is used in the process of analyzing incoming packet., the
> pseudo-codes are list below,
>
> If (sw-tunnel-mode)
>
> Csum fwd engine will analyze if incoming packet is a tunneling packet.
> tunnel = 1;
> else
> Csum fwd engine will not analyze if incoming packet is a
> tunneling packet, and treat all the incoming packets as non-tunneling packets.
> It is used for A.
What about "recognize-tunnel" instead of "sw-tunnel-mode"?
Or "parse-tunnel"?
To me, using "sw-" or "hw-" prefix is confusing because in any case
the checksums can be calculated in software or hardware depending on
"tx_checksum set outer-ip hw|sw".
Moreover, this command has an impact on receive side, but the name
is still "tx_checksum". Maybe this is also confusing.
> For command 2, If the hw-tunnel-mode is set/clear, which will set/clear a
> testpmd flag that is used in the process of how to handle tunneling packet,
> the pseudo-codes are list below,
>
> if (tunnel == 1) { // this is a tunneling packet
> If (hw-tunnel-mode)
> ol_flags |= PKT_TX_UDP_TUNNEL_PKT;
>
> Csum fwd engine set PKT_TX_UDP_TUNNEL_PKT offload flag, which
> means to tell HW treat the transmit packet as a tunneling packet to do
> checksum offload.
> It is used for B.1
> Else
> Csum fwd engine doesn't set PKT_TX_UDP_TUNNEL_PKT
> offload flag, which means tell HW to treat the packet as ordinary
> (non-tunnelled) packet.
> It is used for B.2
> }
What about:
tx_checksum set tunnel-method normal|outer
It would select if we use lX_len or outer_lX_len. Is it what you mean?
And this only makes sense when we use hw checksum right?
>> And will it be possible to support future hardware that will be able to
>> compute
>> both outer l3, outer l4, l3 and l4 checksums?
>
> Yes.
> Currently, i40e support outer l3, outer l4, l3 and l4 checksums offload at
> the same time.
I probably missed something here: we only have PKT_TX_OUTER_IP_CKSUM
but there is no PKT_TX_OUTER_UDP_CKSUM. Is outer UDP checksum supported
> test case C:
> tx_checksum set tunnel-mode hw
> tx_checksum set outer-ip hw
> tx_checksum set ip hw
> tx_checksum set tcp hw
>
> Of course, outer udp is not listed here for VXLAN.
I don't understand why. Could you detail it?
>> I have another idea, please let me know if you find it clearer or not.
>> The commands format would be:
>>
>> tx_checksum <pkt-type> <field1> <action1> <field2> <action2> ...
>>
>> [...]
>>
>> What do you think?
>
> Thanks for your proposal.
> It is clear for me.
>
> But there are two questions for me.
>
> As I know, in current command line framework, the option in command line is
> exact match, so you probably have to add duplicated codes when you want to
> support a new packet types.
I don't think it's really a problem. The cmdline library supports
string list, so can have the following 3 commands definitions:
1. tx_checksum
ip-udp|ip-tcp|ip-sctp|vxlan-ip-udp|vxlan-ip-tcp|vxlan-ip-sctp l3
off|sw|hw l4 off|sw|hw
2. tx_checksum ip-other|vxlan-ip-other l3 off|sw|hw
3. tx_checksum vxlan outer-l3 off|sw|hw outer-l4 off|sw|hw
Maybe 1 and 2 could be splitted in non-vxlan and vxlan. But only
the structure should be redefined to have a different help string,
not the callback function.
> Other question:
>
> Currently, the following testpmd flag is for per port, not for per packet
> type, when they are set, which will affect whole port, not just for packet
> type or format, if you add <pkt-type> option in cmdline, which means you
> have to other changes.
>
> /** Offload IP checksum in csum forward engine */
> #define TESTPMD_TX_OFFLOAD_IP_CKSUM 0x0001
> /** Offload UDP checksum in csum forward engine */
> #define TESTPMD_TX_OFFLOAD_UDP_CKSUM 0x0002
> /** Offload TCP checksum in csum forward engine */
> #define TESTPMD_TX_OFFLOAD_TCP_CKSUM 0x0004
> /** Offload SCTP checksum in csum forward engine */
> #define TESTPMD_TX_OFFLOAD_SCTP_CKSUM 0x0008
> /** Offload VxLAN checksum in csum forward engine */
> #define TESTPMD_TX_OFFLOAD_VXLAN_CKSUM 0x0010
We can add a portid in each command.
> Of course, it is welcome if you can send this patch set with this idea for
> community review.
Let's first agree on the user API :)
Regards,
Olivier