X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fclassifier.h;h=401497279130263de8ee1aabdac83b3ac0725c2d;hb=bad68a9965215511b305c59d7f1830344ec2241f;hp=5629fc0204029c8d4ced05a19edc9085cf719f03;hpb=87542e21fa88f0e566fdff023410a33f11d164ba;p=sliver-openvswitch.git diff --git a/lib/classifier.h b/lib/classifier.h index 5629fc020..401497279 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. @@ -77,7 +77,9 @@ 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_be32 tun_id); +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]); @@ -99,9 +101,12 @@ 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_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]); 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 *); @@ -135,20 +140,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))