Regards
_Sugesh


> -----Original Message-----
> From: Roi Dayan [mailto:[email protected]]
> Sent: Wednesday, February 8, 2017 3:29 PM
> To: [email protected]
> Cc: Paul Blakey <[email protected]>; Or Gerlitz
> <[email protected]>; Hadar Hen Zion <[email protected]>; Shahar
> Klein <[email protected]>; Mark Bloch <[email protected]>; Rony
> Efraim <[email protected]>; Fastabend, John R
> <[email protected]>; Joe Stringer <[email protected]>; Andy
> Gospodarek <[email protected]>; Lance Richardson
> <[email protected]>; Marcelo Ricardo Leitner <[email protected]>;
> Simon Horman <[email protected]>; Jiri Pirko
> <[email protected]>; Chandran, Sugesh <[email protected]>
> Subject: [PATCH ovs V3 05/25] other-config: Add tc-policy switch to control tc
> flower flag
> 

> *ovs_other_config)
> 
>              VLOG_INFO("netdev: Flow API Enabled");
> 
> +            tc_set_policy(smap_get_def(ovs_other_config, "tc-policy",
> +                                       TC_POLICY_DEFAULT));
> +
[Sugesh] I feel we better call this policy as hw-ofld-policy than tc-policy. As 
far as I know tc is one of the way to program the hardware. In the dpdk dpif 
there must be be another flow programming interface that can be used to program 
the offload. It would be nice if we can use the same configuration option  for 
all the deployments.
>              ovsthread_once_done(&once);
>          }
>      }
> diff --git a/lib/tc.c b/lib/tc.c
> index 431242b..b2e3d21 100644
> --- a/lib/tc.c
> +++ b/lib/tc.c
> @@ -38,6 +38,14 @@ VLOG_DEFINE_THIS_MODULE(tc);
> 
>  static struct vlog_rate_limit parse_err = VLOG_RATE_LIMIT_INIT(5, 5);
> 
> +enum tc_offload_policy {
> +    TC_POLICY_NONE,
> +    TC_POLICY_SKIP_SW,
> +    TC_POLICY_SKIP_HW
> +};
> +
> +static enum tc_offload_policy tc_policy = TC_POLICY_NONE;
> +
>  /* Returns tc handle 'major':'minor'. */  unsigned int
> tc_make_handle(unsigned int major, unsigned int minor) @@ -719,6 +727,18
> @@ tc_get_flower(int ifindex, int prio, int handle, struct tc_flower *flower)
>      return error;
>  }
> 
> +static int
> +tc_get_tc_cls_policy(enum tc_offload_policy policy) {
[Sugesh] tc_get_hw_ofld_policy ??
> +    if (policy == TC_POLICY_SKIP_HW) {
> +        return TCA_CLS_FLAGS_SKIP_HW;
> +    } else if (policy == TC_POLICY_SKIP_SW) {
> +        return TCA_CLS_FLAGS_SKIP_SW;
> +    }
> +
> +    return 0;
> +}
> +
>  static void
>  nl_msg_put_act_push_vlan(struct ofpbuf *request, uint16_t vid, uint8_t
> prio)  { @@ -989,7 +1009,7 @@ nl_msg_put_flower_options(struct ofpbuf
> *request, struct tc_flower *flower)
>          }
>      }
> 
> -    nl_msg_put_u32(request, TCA_FLOWER_FLAGS, 0);
> +    nl_msg_put_u32(request, TCA_FLOWER_FLAGS,
> + tc_get_tc_cls_policy(tc_policy));
> 
>      if (flower->tunnel.tunnel) {
>          nl_msg_put_flower_tunnel(request, flower); @@ -1033,3 +1053,24 @@
> tc_replace_flower(int ifindex, uint16_t prio, uint32_t handle,
> 
>      return error;
>  }
> +
> +void
> +tc_set_policy(const char *policy)
> +{
> +    if (!policy) {
> +        return;
> +    }
> +
> +    if (!strcmp(policy, "skip_sw")) {
> +        tc_policy = TC_POLICY_SKIP_SW;
> +    } else if (!strcmp(policy, "skip_hw")) {
> +        tc_policy = TC_POLICY_SKIP_HW;
> +    } else if (!strcmp(policy, "none")) {
> +        tc_policy = TC_POLICY_NONE;
> +    } else {
> +        VLOG_WARN("tc: Invalid policy '%s'", policy);
> +        return;
> +    }
> +
> +    VLOG_INFO("tc: Using policy '%s'", policy); }
> diff --git a/lib/tc.h b/lib/tc.h
> index 5ca6c55..6f6cc09 100644
> --- a/lib/tc.h
> +++ b/lib/tc.h
> @@ -115,5 +115,6 @@ int tc_flush(int ifindex);  int tc_dump_flower_start(int
> ifindex, struct nl_dump *dump);  int parse_netlink_to_tc_flower(struct
> ofpbuf *reply,
>                                 struct tc_flower *flower);
> +void tc_set_policy(const char *policy);
> 
>  #endif /* tc.h */
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index
> 942e68f..8b9bdcb 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -183,6 +183,23 @@
>          </p>
>        </column>
> 
> +      <column name="other_config" key="tc-policy"
> +              type='{"type": "string"}'>
> +        <p>
> +            Specified the policy used with HW offloading.
> +            Options:
> +                <code>none</code>    - Add software rule and offload rule to 
> HW.
> +                <code>skip_sw</code> - Offload rule to HW only.
> +                <code>skip_hw</code> - Add software rule without offloading 
> rule
> to HW.
> +        </p>
> +        <p>
> +            This is only relevant if HW offloading is enabled (hw-offload).
> +        </p>
> +        <p>
> +          The default value is <code>false</code>.
> +        </p>
> +      </column>
> +
>        <column name="other_config" key="dpdk-init"
>                type='{"type": "boolean"}'>
>          <p>
> --
> 2.7.4

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to