X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fclassifier.h;h=f9bcabbef6d08a75283347c504a6f55f42fd7b97;hb=9f88469c0cbc8fa13a97e7b5b7902566e730f72c;hp=20b95909f7f2481112b2467203d5e3626ac91d0f;hpb=e7ed3a3a5f87d20f0cc632ae23adba6f30a4e19d;p=sliver-openvswitch.git diff --git a/lib/classifier.h b/lib/classifier.h index 20b95909f..f9bcabbef 100644 --- a/lib/classifier.h +++ b/lib/classifier.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2009, 2010, 2011, 2012 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -50,6 +50,18 @@ struct cls_table { int n_table_rules; /* Number of rules, including duplicates. */ }; +/* Returns true if 'table' is a "catch-all" table that will match every + * packet (if there is no higher-priority match). */ +static inline bool +cls_table_is_catchall(const struct cls_table *table) +{ + /* A catch-all table can only have one rule, so use hmap_count() as a cheap + * check to rule out other kinds of match before doing the full check with + * flow_wildcards_is_catchall(). */ + return (hmap_count(&table->rules) == 1 + && flow_wildcards_is_catchall(&table->wc)); +} + /* A flow classification rule. * * Use one of the cls_rule_*() functions to initialize a cls_rule. @@ -84,7 +96,7 @@ void cls_rule_set_reg_masked(struct cls_rule *, unsigned int reg_idx, void cls_rule_set_tun_id(struct cls_rule *, ovs_be64 tun_id); void cls_rule_set_tun_id_masked(struct cls_rule *, ovs_be64 tun_id, ovs_be64 mask); -void cls_rule_set_in_port(struct cls_rule *, uint16_t odp_port); +void cls_rule_set_in_port(struct cls_rule *, uint16_t ofp_port); void cls_rule_set_dl_type(struct cls_rule *, ovs_be16); 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]); @@ -98,23 +110,33 @@ void cls_rule_set_dl_vlan(struct cls_rule *, ovs_be16); void cls_rule_set_any_pcp(struct cls_rule *); void cls_rule_set_dl_vlan_pcp(struct cls_rule *, uint8_t); void cls_rule_set_tp_src(struct cls_rule *, ovs_be16); +void cls_rule_set_tp_src_masked(struct cls_rule *, + ovs_be16 port, ovs_be16 mask); void cls_rule_set_tp_dst(struct cls_rule *, ovs_be16); +void cls_rule_set_tp_dst_masked(struct cls_rule *, + ovs_be16 port, ovs_be16 mask); void cls_rule_set_nw_proto(struct cls_rule *, uint8_t); void cls_rule_set_nw_src(struct cls_rule *, ovs_be32); -bool cls_rule_set_nw_src_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask); +void cls_rule_set_nw_src_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask); void cls_rule_set_nw_dst(struct cls_rule *, ovs_be32); -bool cls_rule_set_nw_dst_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask); -void cls_rule_set_nw_tos(struct cls_rule *, uint8_t); +void cls_rule_set_nw_dst_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask); +void cls_rule_set_nw_dscp(struct cls_rule *, uint8_t); +void cls_rule_set_nw_ecn(struct cls_rule *, uint8_t); +void cls_rule_set_nw_ttl(struct cls_rule *, uint8_t); +void cls_rule_set_nw_frag(struct cls_rule *, uint8_t nw_frag); +void cls_rule_set_nw_frag_masked(struct cls_rule *, + uint8_t nw_frag, uint8_t mask); void cls_rule_set_icmp_type(struct cls_rule *, uint8_t); void cls_rule_set_icmp_code(struct cls_rule *, uint8_t); void cls_rule_set_arp_sha(struct cls_rule *, const uint8_t[6]); void cls_rule_set_arp_tha(struct cls_rule *, const uint8_t[6]); void cls_rule_set_ipv6_src(struct cls_rule *, const struct in6_addr *); -bool cls_rule_set_ipv6_src_masked(struct cls_rule *, const struct in6_addr *, +void cls_rule_set_ipv6_src_masked(struct cls_rule *, const struct in6_addr *, const struct in6_addr *); void cls_rule_set_ipv6_dst(struct cls_rule *, const struct in6_addr *); -bool cls_rule_set_ipv6_dst_masked(struct cls_rule *, const struct in6_addr *, +void cls_rule_set_ipv6_dst_masked(struct cls_rule *, const struct in6_addr *, const struct in6_addr *); +void cls_rule_set_ipv6_label(struct cls_rule *, ovs_be32); void cls_rule_set_nd_target(struct cls_rule *, const struct in6_addr *); bool cls_rule_equal(const struct cls_rule *, const struct cls_rule *);