[ovs-dev] [nxm 32/42] classifier: Move in-band set_<field>() functions publicly available.

Justin Pettit jpettit at nicira.com
Sat Nov 6 08:14:07 UTC 2010


Looks good.

--Justin


On Oct 28, 2010, at 10:28 AM, Ben Pfaff wrote:

> These will be useful elsewhere later.
> ---
> lib/classifier.c  |   63 ++++++++++++++++++++++++++
> lib/classifier.h  |   10 ++++
> ofproto/in-band.c |  127 +++++++++++++---------------------------------------
> 3 files changed, 105 insertions(+), 95 deletions(-)
> 
> diff --git a/lib/classifier.c b/lib/classifier.c
> index 47da030..fa4fd06 100644
> --- a/lib/classifier.c
> +++ b/lib/classifier.c
> @@ -163,6 +163,69 @@ cls_rule_zero_wildcards(struct cls_rule *rule)
>     zero_wildcards(&rule->flow, &rule->wc);
> }
> 
> +void
> +cls_rule_set_in_port(struct cls_rule *rule, uint16_t odp_port)
> +{
> +    rule->wc.wildcards &= ~OFPFW_IN_PORT;
> +    rule->flow.in_port = odp_port;
> +}
> +
> +void
> +cls_rule_set_dl_type(struct cls_rule *rule, ovs_be16 dl_type)
> +{
> +    rule->wc.wildcards &= ~OFPFW_DL_TYPE;
> +    rule->flow.dl_type = dl_type;
> +}
> +
> +void
> +cls_rule_set_dl_src(struct cls_rule *rule, const uint8_t dl_src[ETH_ADDR_LEN])
> +{
> +    rule->wc.wildcards &= ~OFPFW_DL_SRC;
> +    memcpy(rule->flow.dl_src, dl_src, ETH_ADDR_LEN);
> +}
> +
> +void
> +cls_rule_set_dl_dst(struct cls_rule *rule, const uint8_t dl_dst[ETH_ADDR_LEN])
> +{
> +    rule->wc.wildcards &= ~OFPFW_DL_DST;
> +    memcpy(rule->flow.dl_dst, dl_dst, ETH_ADDR_LEN);
> +}
> +
> +void
> +cls_rule_set_tp_src(struct cls_rule *rule, ovs_be16 tp_src)
> +{
> +    rule->wc.wildcards &= ~OFPFW_TP_SRC;
> +    rule->flow.tp_src = tp_src;
> +}
> +
> +void
> +cls_rule_set_tp_dst(struct cls_rule *rule, ovs_be16 tp_dst)
> +{
> +    rule->wc.wildcards &= ~OFPFW_TP_DST;
> +    rule->flow.tp_dst = tp_dst;
> +}
> +
> +void
> +cls_rule_set_nw_proto(struct cls_rule *rule, uint8_t nw_proto)
> +{
> +    rule->wc.wildcards &= ~OFPFW_NW_PROTO;
> +    rule->flow.nw_proto = nw_proto;
> +}
> +
> +void
> +cls_rule_set_nw_src(struct cls_rule *rule, ovs_be32 nw_src)
> +{
> +    flow_wildcards_set_nw_src_mask(&rule->wc, htonl(UINT32_MAX));
> +    rule->flow.nw_src = nw_src;
> +}
> +
> +void
> +cls_rule_set_nw_dst(struct cls_rule *rule, ovs_be32 nw_dst)
> +{
> +    flow_wildcards_set_nw_dst_mask(&rule->wc, htonl(UINT32_MAX));
> +    rule->flow.nw_dst = nw_dst;
> +}
> +
> /* Converts 'rule' to a string and returns the string.  The caller must free
>  * the string (with free()). */
> char *
> diff --git a/lib/classifier.h b/lib/classifier.h
> index cb81cb6..ebcd0a7 100644
> --- a/lib/classifier.h
> +++ b/lib/classifier.h
> @@ -80,6 +80,16 @@ void cls_rule_init_catchall(struct cls_rule *, unsigned int priority);
> 
> void cls_rule_zero_wildcards(struct cls_rule *);
> 
> +void cls_rule_set_in_port(struct cls_rule *, uint16_t odp_port);
> +void cls_rule_set_dl_type(struct cls_rule *, ovs_be16 dl_type);
> +void cls_rule_set_dl_src(struct cls_rule *, const uint8_t[6]);
> +void cls_rule_set_dl_dst(struct cls_rule *, const uint8_t[6]);
> +void cls_rule_set_tp_src(struct cls_rule *, ovs_be16);
> +void cls_rule_set_tp_dst(struct cls_rule *, ovs_be16);
> +void cls_rule_set_nw_proto(struct cls_rule *, uint8_t);
> +void cls_rule_set_nw_src(struct cls_rule *, ovs_be32);
> +void cls_rule_set_nw_dst(struct cls_rule *, ovs_be32);
> +
> char *cls_rule_to_string(const struct cls_rule *);
> void cls_rule_print(const struct cls_rule *);
> 
> diff --git a/ofproto/in-band.c b/ofproto/in-band.c
> index b6ee990..f7fd4e9 100644
> --- a/ofproto/in-band.c
> +++ b/ofproto/in-band.c
> @@ -454,69 +454,6 @@ in_band_rule_check(struct in_band *in_band, const struct flow *flow,
> }
> 
> static void
> -set_in_port(struct cls_rule *rule, uint16_t odp_port)
> -{
> -    rule->wc.wildcards &= ~OFPFW_IN_PORT;
> -    rule->flow.in_port = odp_port;
> -}
> -
> -static void
> -set_dl_type(struct cls_rule *rule, uint16_t dl_type)
> -{
> -    rule->wc.wildcards &= ~OFPFW_DL_TYPE;
> -    rule->flow.dl_type = dl_type;
> -}
> -
> -static void
> -set_dl_src(struct cls_rule *rule, const uint8_t dl_src[ETH_ADDR_LEN])
> -{
> -    rule->wc.wildcards &= ~OFPFW_DL_SRC;
> -    memcpy(rule->flow.dl_src, dl_src, ETH_ADDR_LEN);
> -}
> -
> -static void
> -set_dl_dst(struct cls_rule *rule, const uint8_t dl_dst[ETH_ADDR_LEN])
> -{
> -    rule->wc.wildcards &= ~OFPFW_DL_DST;
> -    memcpy(rule->flow.dl_dst, dl_dst, ETH_ADDR_LEN);
> -}
> -
> -static void
> -set_tp_src(struct cls_rule *rule, uint16_t tp_src)
> -{
> -    rule->wc.wildcards &= ~OFPFW_TP_SRC;
> -    rule->flow.tp_src = tp_src;
> -}
> -
> -static void
> -set_tp_dst(struct cls_rule *rule, uint16_t tp_dst)
> -{
> -    rule->wc.wildcards &= ~OFPFW_TP_DST;
> -    rule->flow.tp_dst = tp_dst;
> -}
> -
> -static void
> -set_nw_proto(struct cls_rule *rule, uint8_t nw_proto)
> -{
> -    rule->wc.wildcards &= ~OFPFW_NW_PROTO;
> -    rule->flow.nw_proto = nw_proto;
> -}
> -
> -static void
> -set_nw_src(struct cls_rule *rule, const struct in_addr nw_src)
> -{
> -    rule->wc.wildcards &= ~OFPFW_NW_SRC_MASK;
> -    rule->flow.nw_src = nw_src.s_addr;
> -}
> -
> -static void
> -set_nw_dst(struct cls_rule *rule, const struct in_addr nw_dst)
> -{
> -    rule->wc.wildcards &= ~OFPFW_NW_DST_MASK;
> -    rule->flow.nw_dst = nw_dst.s_addr;
> -}
> -
> -static void
> make_rules(struct in_band *ib,
>            void (*cb)(struct in_band *, const struct cls_rule *))
> {
> @@ -526,26 +463,26 @@ make_rules(struct in_band *ib,
>     if (!eth_addr_is_zero(ib->installed_local_mac)) {
>         /* (a) Allow DHCP requests sent from the local port. */
>         cls_rule_init_catchall(&rule, IBR_FROM_LOCAL_DHCP);
> -        set_in_port(&rule, ODPP_LOCAL);
> -        set_dl_type(&rule, htons(ETH_TYPE_IP));
> -        set_dl_src(&rule, ib->installed_local_mac);
> -        set_nw_proto(&rule, IP_TYPE_UDP);
> -        set_tp_src(&rule, htons(DHCP_CLIENT_PORT));
> -        set_tp_dst(&rule, htons(DHCP_SERVER_PORT));
> +        cls_rule_set_in_port(&rule, ODPP_LOCAL);
> +        cls_rule_set_dl_type(&rule, htons(ETH_TYPE_IP));
> +        cls_rule_set_dl_src(&rule, ib->installed_local_mac);
> +        cls_rule_set_nw_proto(&rule, IP_TYPE_UDP);
> +        cls_rule_set_tp_src(&rule, htons(DHCP_CLIENT_PORT));
> +        cls_rule_set_tp_dst(&rule, htons(DHCP_SERVER_PORT));
>         cb(ib, &rule);
> 
>         /* (b) Allow ARP replies to the local port's MAC address. */
>         cls_rule_init_catchall(&rule, IBR_TO_LOCAL_ARP);
> -        set_dl_type(&rule, htons(ETH_TYPE_ARP));
> -        set_dl_dst(&rule, ib->installed_local_mac);
> -        set_nw_proto(&rule, ARP_OP_REPLY);
> +        cls_rule_set_dl_type(&rule, htons(ETH_TYPE_ARP));
> +        cls_rule_set_dl_dst(&rule, ib->installed_local_mac);
> +        cls_rule_set_nw_proto(&rule, ARP_OP_REPLY);
>         cb(ib, &rule);
> 
>         /* (c) Allow ARP requests from the local port's MAC address.  */
>         cls_rule_init_catchall(&rule, IBR_FROM_LOCAL_ARP);
> -        set_dl_type(&rule, htons(ETH_TYPE_ARP));
> -        set_dl_src(&rule, ib->installed_local_mac);
> -        set_nw_proto(&rule, ARP_OP_REQUEST);
> +        cls_rule_set_dl_type(&rule, htons(ETH_TYPE_ARP));
> +        cls_rule_set_dl_src(&rule, ib->installed_local_mac);
> +        cls_rule_set_nw_proto(&rule, ARP_OP_REQUEST);
>         cb(ib, &rule);
>     }
> 
> @@ -562,16 +499,16 @@ make_rules(struct in_band *ib,
> 
>         /* (d) Allow ARP replies to the next hop's MAC address. */
>         cls_rule_init_catchall(&rule, IBR_TO_NEXT_HOP_ARP);
> -        set_dl_type(&rule, htons(ETH_TYPE_ARP));
> -        set_dl_dst(&rule, remote_mac);
> -        set_nw_proto(&rule, ARP_OP_REPLY);
> +        cls_rule_set_dl_type(&rule, htons(ETH_TYPE_ARP));
> +        cls_rule_set_dl_dst(&rule, remote_mac);
> +        cls_rule_set_nw_proto(&rule, ARP_OP_REPLY);
>         cb(ib, &rule);
> 
>         /* (e) Allow ARP requests from the next hop's MAC address. */
>         cls_rule_init_catchall(&rule, IBR_FROM_NEXT_HOP_ARP);
> -        set_dl_type(&rule, htons(ETH_TYPE_ARP));
> -        set_dl_src(&rule, remote_mac);
> -        set_nw_proto(&rule, ARP_OP_REQUEST);
> +        cls_rule_set_dl_type(&rule, htons(ETH_TYPE_ARP));
> +        cls_rule_set_dl_src(&rule, remote_mac);
> +        cls_rule_set_nw_proto(&rule, ARP_OP_REQUEST);
>         cb(ib, &rule);
>     }
> 
> @@ -582,17 +519,17 @@ make_rules(struct in_band *ib,
>             /* (f) Allow ARP replies containing the remote's IP address as a
>              * target. */
>             cls_rule_init_catchall(&rule, IBR_TO_REMOTE_ARP);
> -            set_dl_type(&rule, htons(ETH_TYPE_ARP));
> -            set_nw_proto(&rule, ARP_OP_REPLY);
> -            set_nw_dst(&rule, a->sin_addr);
> +            cls_rule_set_dl_type(&rule, htons(ETH_TYPE_ARP));
> +            cls_rule_set_nw_proto(&rule, ARP_OP_REPLY);
> +            cls_rule_set_nw_dst(&rule, a->sin_addr.s_addr);
>             cb(ib, &rule);
> 
>             /* (g) Allow ARP requests containing the remote's IP address as a
>              * source. */
>             cls_rule_init_catchall(&rule, IBR_FROM_REMOTE_ARP);
> -            set_dl_type(&rule, htons(ETH_TYPE_ARP));
> -            set_nw_proto(&rule, ARP_OP_REQUEST);
> -            set_nw_src(&rule, a->sin_addr);
> +            cls_rule_set_dl_type(&rule, htons(ETH_TYPE_ARP));
> +            cls_rule_set_nw_proto(&rule, ARP_OP_REQUEST);
> +            cls_rule_set_nw_src(&rule, a->sin_addr.s_addr);
>             cb(ib, &rule);
>         }
> 
> @@ -601,18 +538,18 @@ make_rules(struct in_band *ib,
>             || a->sin_port != a[-1].sin_port) {
>             /* (h) Allow TCP traffic to the remote's IP and port. */
>             cls_rule_init_catchall(&rule, IBR_TO_REMOTE_TCP);
> -            set_dl_type(&rule, htons(ETH_TYPE_IP));
> -            set_nw_proto(&rule, IP_TYPE_TCP);
> -            set_nw_dst(&rule, a->sin_addr);
> -            set_tp_dst(&rule, a->sin_port);
> +            cls_rule_set_dl_type(&rule, htons(ETH_TYPE_IP));
> +            cls_rule_set_nw_proto(&rule, IP_TYPE_TCP);
> +            cls_rule_set_nw_dst(&rule, a->sin_addr.s_addr);
> +            cls_rule_set_tp_dst(&rule, a->sin_port);
>             cb(ib, &rule);
> 
>             /* (i) Allow TCP traffic from the remote's IP and port. */
>             cls_rule_init_catchall(&rule, IBR_FROM_REMOTE_TCP);
> -            set_dl_type(&rule, htons(ETH_TYPE_IP));
> -            set_nw_proto(&rule, IP_TYPE_TCP);
> -            set_nw_src(&rule, a->sin_addr);
> -            set_tp_src(&rule, a->sin_port);
> +            cls_rule_set_dl_type(&rule, htons(ETH_TYPE_IP));
> +            cls_rule_set_nw_proto(&rule, IP_TYPE_TCP);
> +            cls_rule_set_nw_src(&rule, a->sin_addr.s_addr);
> +            cls_rule_set_tp_src(&rule, a->sin_port);
>             cb(ib, &rule);
>         }
>     }
> -- 
> 1.7.1
> 
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org





More information about the dev mailing list