On Fri, Oct 20, 2023 at 09:19:21AM -0400, Ihar Hrachyshka wrote:
> On Fri, Oct 20, 2023 at 8:40 AM Simon Horman <ho...@ovn.org> wrote:
> 
> > On Thu, Oct 19, 2023 at 09:00:39AM -0400, Ihar Hrachyshka wrote:
> > > On 10/19/23 7:14 AM, Simon Horman wrote:
> > > > On Thu, Oct 19, 2023 at 02:57:26AM +0000, Ihar Hrachyshka wrote:
> > > > > The command reads a flow string and an optional additional payload on
> > > > > stdin and produces a hex-string representation of the corresponding
> > > > > frame on stdout. It may receive more than a single input line.
> > > > >
> > > > > The command may be useful in tests, where we may need to produce hex
> > > > > frame payloads to compare observed frames against.
> > > > >
> > > > > As an example of the tool use, a single test case is converted to it.
> > > > > The test uses both normal and --bad-csum behavior of the tool,
> > > > > confirming it works as advertised.
> > > > >
> > > > > Signed-off-by: Ihar Hrachyshka <ihrac...@redhat.com>
> > > > ...
> > > >
> > > > > @@ -3318,7 +3320,7 @@ packet_expand(struct dp_packet *p, const
> > struct flow *flow, size_t size)
> > > > >    *      from 'l7'. */
> > > > >   void
> > > > >   flow_compose(struct dp_packet *p, const struct flow *flow,
> > > > > -             const void *l7, size_t l7_len)
> > > > > +             const void *l7, size_t l7_len, bool bad_csum)
> > > > >   {
> > > > >       /* Add code to this function (or its callees) for emitting new
> > fields or
> > > > >        * protocols.  (This isn't essential, so it can be skipped for
> > initial
> > > > > @@ -3370,7 +3372,12 @@ flow_compose(struct dp_packet *p, const
> > struct flow *flow,
> > > > >           /* Checksum has already been zeroed by put_zeros call. */
> > > > >           ip->ip_csum = csum(ip, sizeof *ip);
> > > > >
> > > > > -        dp_packet_ol_set_ip_csum_good(p);
> > > > > +        if (bad_csum) {
> > > > > +            ip->ip_csum++;
> > > > Hi Ihar,
> > > >
> > > > I am curious to know why '++'.
> > >
> > > I'm producing a checksum that is invalid. Since Internet checksum is
> > "16-bit
> > > ones' complement of the ones' complement sum", I assume that flipping any
> > > bit in it will result in an invalid result. Is it not the case? (++
> > could be
> > > anything else that guarantees a bit flip in the field. Nothing special
> > about
> > > ++ itself.)
> >
> > Yes, that is correct AFAIK.
> >
> > > And yes, I see that gcc is warning about this line in CI. So this line
> > may
> > > need adjustment for this reason.
> >
> > Thanks
> >
> > > > I am also wondering if we could re-cast this as 'skip-csum-verify' or
> > > > similar, rather than 'bad-csum'. After all, as it's not verified it
> > might
> > > > actually be correct.
> > > I am struggling to see how this could be "correct" after ++ on the final
> > > (valid) checksum. It may be that I miss something basic about how
> > checksums
> > > work though, let me know.
> >
> > I guess my question is really this: what is the goal and use-case for
> > this option?
> >
> >
> The patch includes an example test case that is converted to the tool. The
> test case 1) generates a packet with a garbled checksum; 2) pushes it
> through datapath; 3) confirms that the output has a proper checksum
> (fixed). That's why I needed a way to generate a "broken IPv4 checksum"
> packet - to confirm the behavior.

Thanks, I understand now.  And I agree that 'bad-csum' is an appropriate
name for this option.  Sorry for the noise.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to