X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdpif.h;h=02029150ecb5d458d3f7652eb56b664aa23660da;hb=be812f2d2b0c948e5f52017c4df79645809fcb90;hp=0ff2389ddee8513bcef42669912f3eea68871e2a;hpb=579a77e024b93ba5dfb840468c2fcd804e576d7b;p=openvswitch diff --git a/lib/dpif.h b/lib/dpif.h index 0ff2389d..02029150 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, Inc. * * 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 *); @@ -177,12 +177,11 @@ int dpif_execute(struct dpif *, enum dpif_op_type { DPIF_OP_FLOW_PUT = 1, - DPIF_OP_EXECUTE + DPIF_OP_FLOW_DEL, + DPIF_OP_EXECUTE, }; 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 +191,36 @@ 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. */ - +struct dpif_flow_del { /* Input. */ + const struct nlattr *key; /* Flow to delete. */ + size_t key_len; /* Length of 'key' in bytes. */ + + /* Output. */ + struct dpif_flow_stats *stats; /* Optional flow statistics. */ +}; + +struct dpif_execute { 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_flow_del flow_del; + 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,9 +250,8 @@ 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(struct dpif *, struct dpif_upcall *); +int dpif_recv_set(struct dpif *, bool enable); +int dpif_recv(struct dpif *, struct dpif_upcall *, struct ofpbuf *); void dpif_recv_purge(struct dpif *); void dpif_recv_wait(struct dpif *);