> On Nov 15, 2016, at 3:35 PM, Joo Kim <[email protected]> wrote:
>
> Hello,
>
> In this OVS (2.6) code below,
> It seems that a dp_netdev_flow obj contains a dpcls_rule struct, and given
> a dpcls_rule, it gets the corresponding dp_netdev_flow via
> dp_netdev_flow_cast().
> Does it mean dpcls_rule and dp_netdev_flow have an 1-1 mapping
> relationship?
Yes, as you saw from the code, the relationship is 1:1.
> But, as I understand, dpcls_rule could have a wildcard which can match
> multiple flows. Then, how does dp_netdev_flow_cast() (which seems to assume
> 1-1 mapping) make sense?
>
You are tripping over the overloaded term ‘flow’ here. struct dp_netdev_flow
and the associated struct dpcls_rule always have the same wildcarding. A
wildcarded dpcls_rule, and therefore dp_netdev_flow, can match multiple
transport connections, or multiple “exact match flows”.
Jarno
>
> struct dp_netdev_flow {
> const struct flow flow; /* Unmasked flow that created this entry.
> */
> /* Hash table index by unmasked flow. */
> const struct cmap_node node; /* In owning dp_netdev_pmd_thread's */
> /* 'flow_table'. */
> …
> /* Packet classification. */
> struct dpcls_rule cr; /* In owning dp_netdev's 'cls'. */
> /* 'cr' must be the last member. */
> };
>
>
>
> static struct dp_netdev_flow *
> dp_netdev_flow_cast(const struct dpcls_rule *cr)
> {
> return cr ? CONTAINER_OF(cr, struct dp_netdev_flow, cr) : NULL;
> }
>
>
> static struct dp_netdev_flow *
> dp_netdev_pmd_lookup_flow(struct dp_netdev_pmd_thread *pmd,
> const struct netdev_flow_key *key,
> int *lookup_num_p)
> {
> struct dpcls *cls;
> struct dpcls_rule *rule;
> odp_port_t in_port = u32_to_odp(MINIFLOW_GET_U32(&key->mf, in_port));
> struct dp_netdev_flow *netdev_flow = NULL;
>
> cls = dp_netdev_pmd_lookup_dpcls(pmd, in_port);
> if (OVS_LIKELY(cls)) {
> dpcls_lookup(cls, key, &rule, 1, lookup_num_p);
> netdev_flow = dp_netdev_flow_cast(rule); <<<<<
> }
> return netdev_flow;
> }
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev