[ovs-dev] [PATCHv2 1/6] Add support for connection tracking.
Joe Stringer
joestringer at nicira.com
Fri Sep 18 23:21:33 UTC 2015
On 18 September 2015 at 09:47, Daniele Di Proietto
<diproiettod at vmware.com> wrote:
> Hi Joe,
>
> thanks for sending this!
>
> While doing some testing with my userspace connection tracker
> on top of your series I encountered some small issues that
> I was hoping you could squash in before pushing it to master.
>
> None of the comments is supposed to be a blocker, we can address
> them after merging, as far as I'm concerned.
>
>>@@ -2103,6 +2148,22 @@ mf_from_tun_flags_string(const char *s, ovs_be16
>>*flagsp, ovs_be16 *maskp)
>> htons(FLOW_TNL_PUB_F_MASK), maskp);
>> }
>>
>>+static char *
>>+mf_from_ct_state_string(const char *s, ovs_be16 *flagsp, ovs_be16 *maskp)
>>+{
>>+ ovs_be16 flags, mask;
>>+ char *error;
>>+
>>+ error = parse_mf_flags(s, packet_ct_state_to_string, "ct_state",
>>&flags,
>>+ htons(CS_SUPPORTED_MASK), &mask);
>>+ if (!error) {
>>+ *flagsp = flags;
>>+ *maskp = mask;
>>+ }
>>+
>>+ return error;
>>+}
>>+
>> /* Parses 's', a string value for field 'mf', into 'value' and 'mask'.
>>Returns
>> * NULL if successful, otherwise a malloc()'d string describing the
>>error. */
>> char *
>
> I get a warning with GCC 4.9.2 for this function. It's complaining that the
> 'flags' variable may be used without initialization. Rewriting it like
> this suppresses the warning for me:
>
> static char *
> mf_from_ct_state_string(const char *s, ovs_be16 *flagsp, ovs_be16 *maskp)
> {
> return parse_mf_flags(s, packet_ct_state_to_string, "ct_state", flagsp,
> htons(CS_SUPPORTED_MASK), maskp);
> }
>
>
>>@@ -2057,6 +2180,24 @@ format_odp_key_attr(const struct nlattr *a, const
>>struct nlattr *ma,
>> }
>> break;
>>
>>+ case OVS_KEY_ATTR_CT_STATE:
>>+ if (!is_exact) {
>>+ format_flags_masked(ds, NULL, packet_ct_state_to_string,
>>+ nl_attr_get_u8(a), nl_attr_get_u8(ma),
>>+ UINT8_MAX);
>>+ } else {
>>+ format_flags(ds, packet_ct_state_to_string,
>>+ nl_attr_get_u8(a), ',');
>>+ }
>>+ break;
>>+
>>+ case OVS_KEY_ATTR_CT_ZONE:
>>+ if (verbose || !mask_empty(ma)) {
>>+ ds_put_format(ds, "%"PRIx16, nl_attr_get_u16(a));
>>+ }
>>+ break;
>
>
> Is there a particular reasons why we're not printing the mask here? When I
> dump flows using the verbose option and I see 'ct_zone(0)' I assume that
> we're not wildcarding the zone.
>
> Also shouldn't we prefix PRIx16 with "#" (like we're doing elsewhere in the
> function)?
>
> Do you think this is acceptable?
>
> case OVS_KEY_ATTR_CT_ZONE:
> if (verbose || !mask_empty(ma)) {
> ds_put_format(ds, "%#"PRIx16, nl_attr_get_u16(a));
> if (!is_exact) {
> ds_put_format(ds, "/%#"PRIx16, nl_attr_get_u16(ma));
> }
> }
> break;
Thanks Daniele, I took these fragments as-is.
>>@@ -153,6 +158,10 @@
>>s/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99,pcp=7),encap(/
>> s/$/)/' odp-base.txt
>>
>> echo
>>+ echo '# Valid forms with conntrack fields.'
>>+ sed 's/\(eth([[^)]]*),?\)/\1,ct_state(+trk),/' odp-base.txt
>
> It seems that this regex doesn't actually change the flows.
>
> How about like this? I also had to remove the comma at the end.
>
> sed 's/\(eth([[^)]]*)\)/\1,ct_state(+trk)/' odp-base.txt
>
> I would also introduce a ct_zone() attribute here, to test the above
> change.
>
> Also, the next commits should introduce hex numbers with lowercase letters
> instead of uppercase
>
>>+
>>+ echo
>> echo '# Valid forms with IP first fragment.'
>> sed -n 's/,frag=no),/,frag=first),/p' odp-base.txt
>
> I'm also getting a test failure (ofproto-dpif - in place modification),
> because formatting odp flows with the verbose flag introduces new
> attributes.
Thanks for the feedback, will do another once-over on the corners of
the testsuite like these.
More information about the dev
mailing list