• P
    selftests: forwarding: lib: Add helpers for checksum handling · 952e0ee3
    Petr Machata 提交于
    In order to generate IGMPv3 and MLDv2 packets on the fly, we will need
    helpers to calculate the packet checksum.
    
    The approach presented in this patch revolves around payload templates
    for mausezahn. These are mausezahn-like payload strings (01:23:45:...)
    with possibly one 2-byte sequence replaced with the word PAYLOAD. The
    main function is payload_template_calc_checksum(), which calculates
    RFC 1071 checksum of the message. There are further helpers to then
    convert the checksum to the payload format, and to expand it.
    
    For IPv6, MLDv2 message checksum is computed using a pseudoheader that
    differs from the header used in the payload itself. The fact that the
    two messages are different means that the checksum needs to be
    returned as a separate quantity, instead of being expanded in-place in
    the payload itself. Furthermore, the pseudoheader includes a length of
    the message. Much like the checksum, this needs to be expanded in
    mausezahn format. And likewise for number of addresses for (S,G)
    entries. Thus we have several places where a computed quantity needs
    to be presented in the payload format. Add a helper u16_to_bytes(),
    which will be used in all these cases.
    Signed-off-by: NPetr Machata <petrm@nvidia.com>
    Acked-by: NNikolay Aleksandrov <razor@blackwall.org>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    952e0ee3
lib.sh 34.6 KB