X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fclassifier.h;h=7b347e7b992ef122b4c51a43b97b789c9b8c222d;hb=f9ef1c31cfcd2d9ded66588a11c59e29e5aaa2ca;hp=d8135e9ec0973c52f65babe6cbb06005e8c82398;hpb=844dff325b1f6a6f520fce9242c85162275ab7ad;p=openvswitch diff --git a/lib/classifier.h b/lib/classifier.h index d8135e9e..7b347e7b 100644 --- a/lib/classifier.h +++ b/lib/classifier.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010 Nicira Networks. + * Copyright (c) 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -72,21 +72,24 @@ void cls_rule_init_exact(const struct flow *, unsigned int priority, struct cls_rule *); void cls_rule_init_catchall(struct cls_rule *, unsigned int priority); -void cls_rule_from_match(const struct ofp_match *, unsigned int priority, - int flow_format, uint64_t cookie, struct cls_rule *); -void cls_rule_to_match(const struct cls_rule *, int flow_format, - struct ofp_match *); - void cls_rule_zero_wildcarded_fields(struct cls_rule *); +void cls_rule_set_reg(struct cls_rule *, unsigned int reg_idx, uint32_t value); +void cls_rule_set_reg_masked(struct cls_rule *, unsigned int reg_idx, + uint32_t value, uint32_t mask); +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_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]); -bool cls_rule_set_dl_tci(struct cls_rule *, ovs_be16 tci); -bool cls_rule_set_dl_tci_masked(struct cls_rule *, +void cls_rule_set_dl_tci(struct cls_rule *, ovs_be16 tci); +void cls_rule_set_dl_tci_masked(struct cls_rule *, ovs_be16 tci, ovs_be16 mask); +void cls_rule_set_any_vid(struct cls_rule *); 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_dst(struct cls_rule *, ovs_be16); @@ -101,6 +104,7 @@ void cls_rule_set_icmp_code(struct cls_rule *, uint8_t); bool cls_rule_equal(const struct cls_rule *, const struct cls_rule *); +void cls_rule_format(const struct cls_rule *, struct ds *); char *cls_rule_to_string(const struct cls_rule *); void cls_rule_print(const struct cls_rule *); @@ -134,20 +138,16 @@ struct cls_rule *cls_cursor_first(struct cls_cursor *); struct cls_rule *cls_cursor_next(struct cls_cursor *, struct cls_rule *); #define CLS_CURSOR_FOR_EACH(RULE, MEMBER, CURSOR) \ - for ((RULE) = OBJECT_CONTAINING(cls_cursor_first(CURSOR), \ - RULE, MEMBER); \ + for (ASSIGN_CONTAINER(RULE, cls_cursor_first(CURSOR), MEMBER); \ &(RULE)->MEMBER != NULL; \ - (RULE) = OBJECT_CONTAINING(cls_cursor_next(CURSOR, \ - &(RULE)->MEMBER), \ - RULE, MEMBER)) + ASSIGN_CONTAINER(RULE, cls_cursor_next(CURSOR, &(RULE)->MEMBER), \ + MEMBER)) #define CLS_CURSOR_FOR_EACH_SAFE(RULE, NEXT, MEMBER, CURSOR) \ - for ((RULE) = OBJECT_CONTAINING(cls_cursor_first(CURSOR), \ - RULE, MEMBER); \ + for (ASSIGN_CONTAINER(RULE, cls_cursor_first(CURSOR), MEMBER); \ (&(RULE)->MEMBER != NULL \ - ? ((NEXT) = OBJECT_CONTAINING(cls_cursor_next(CURSOR, \ - &(RULE)->MEMBER), \ - RULE, MEMBER), 1) \ + ? ASSIGN_CONTAINER(NEXT, cls_cursor_next(CURSOR, &(RULE)->MEMBER), \ + MEMBER) \ : 0); \ (RULE) = (NEXT))