X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=inline;f=lib%2Fdpif.h;h=1a6ca0538739d33702334d79c57c3b62ddac0b2e;hb=c9f716683d1d4302f026764effc17554c93a8c9f;hp=0ff2389ddee8513bcef42669912f3eea68871e2a;hpb=579a77e024b93ba5dfb840468c2fcd804e576d7b;p=openvswitch diff --git a/lib/dpif.h b/lib/dpif.h index 0ff2389d..1a6ca053 100644 --- a/lib/dpif.h +++ b/lib/dpif.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2008, 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. @@ -128,7 +128,7 @@ struct dpif_flow_stats { uint8_t tcp_flags; }; -void dpif_flow_stats_extract(const struct flow *, struct ofpbuf *packet, +void dpif_flow_stats_extract(const struct flow *, const struct ofpbuf *packet, struct dpif_flow_stats *); void dpif_flow_stats_format(const struct dpif_flow_stats *, struct ds *); @@ -181,8 +181,6 @@ enum dpif_op_type { }; struct dpif_flow_put { - enum dpif_op_type type; /* Always DPIF_OP_FLOW_PUT. */ - /* Input. */ enum dpif_flow_put_flags flags; /* DPIF_FP_*. */ const struct nlattr *key; /* Flow to put. */ @@ -192,30 +190,26 @@ struct dpif_flow_put { /* Output. */ struct dpif_flow_stats *stats; /* Optional flow statistics. */ - int error; /* 0 or positive errno value. */ }; struct dpif_execute { - enum dpif_op_type type; /* Always DPIF_OP_EXECUTE. */ - - /* Input. */ const struct nlattr *key; /* Partial flow key (only for metadata). */ size_t key_len; /* Length of 'key' in bytes. */ const struct nlattr *actions; /* Actions to execute on packet. */ size_t actions_len; /* Length of 'actions' in bytes. */ const struct ofpbuf *packet; /* Packet to execute. */ - - /* Output. */ - int error; /* 0 or positive errno value. */ }; -union dpif_op { +struct dpif_op { enum dpif_op_type type; - struct dpif_flow_put flow_put; - struct dpif_execute execute; + int error; + union { + struct dpif_flow_put flow_put; + struct dpif_execute execute; + } u; }; -void dpif_operate(struct dpif *, union dpif_op **ops, size_t n_ops); +void dpif_operate(struct dpif *, struct dpif_op **ops, size_t n_ops); /* Upcalls. */ @@ -245,8 +239,7 @@ struct dpif_upcall { uint64_t userdata; /* Argument to OVS_ACTION_ATTR_USERSPACE. */ }; -int dpif_recv_get_mask(const struct dpif *, int *listen_mask); -int dpif_recv_set_mask(struct dpif *, int listen_mask); +int dpif_recv_set(struct dpif *, bool enable); int dpif_recv(struct dpif *, struct dpif_upcall *); void dpif_recv_purge(struct dpif *); void dpif_recv_wait(struct dpif *);