X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fdpif.h;h=02029150ecb5d458d3f7652eb56b664aa23660da;hb=f25d0cf3c366d92042269a4f787f19c741c2530c;hp=223f990eae820be2e305f7a4dfa286a5b1e65d29;hpb=7257b535ab8e5fafd811c5f6788205eefdd44948;p=sliver-openvswitch.git diff --git a/lib/dpif.h b/lib/dpif.h index 223f990ea..02029150e 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. @@ -40,6 +40,7 @@ struct dpif_class; int dp_register_provider(const struct dpif_class *); int dp_unregister_provider(const char *type); +void dp_blacklist_provider(const char *type); void dp_enumerate_types(struct sset *types); const char *dpif_normalize_type(const char *); @@ -127,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 *); @@ -176,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. */ @@ -191,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. */ @@ -244,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 *);