This patch exposes jsonrpc.h for inclusion in C++, which will be used by NSX.
It added [extern "C"] to the header file and fixed other places to accommodate this change. Signed-off-by: Yifeng Sun <[email protected]> --- include/openvswitch/automake.mk | 1 + include/openvswitch/jsonrpc.h | 153 ++++++++++++++++++++++++++++++++++++ lib/automake.mk | 1 - lib/jsonrpc.c | 2 +- lib/jsonrpc.h | 145 ---------------------------------- lib/ovsdb-idl.c | 2 +- lib/stream.c | 2 +- lib/unixctl.c | 2 +- ovn/utilities/ovn-nbctl.c | 2 +- ovsdb/jsonrpc-server.c | 2 +- ovsdb/monitor.c | 2 +- ovsdb/ovsdb-client.c | 2 +- ovsdb/ovsdb-server.c | 2 +- ovsdb/raft-rpc.c | 2 +- ovsdb/raft.c | 2 +- ovsdb/replication.c | 2 +- ovsdb/trigger.c | 2 +- tests/oss-fuzz/json_parser_target.c | 2 +- tests/test-jsonrpc.c | 2 +- tests/test-ovsdb.c | 2 +- utilities/ovs-appctl.c | 2 +- vswitchd/bridge.c | 2 +- 22 files changed, 172 insertions(+), 164 deletions(-) create mode 100644 include/openvswitch/jsonrpc.h delete mode 100644 lib/jsonrpc.h diff --git a/include/openvswitch/automake.mk b/include/openvswitch/automake.mk index aede515663cd..7de0d33df80b 100644 --- a/include/openvswitch/automake.mk +++ b/include/openvswitch/automake.mk @@ -6,6 +6,7 @@ openvswitchinclude_HEADERS = \ include/openvswitch/flow.h \ include/openvswitch/geneve.h \ include/openvswitch/json.h \ + include/openvswitch/jsonrpc.h \ include/openvswitch/list.h \ include/openvswitch/netdev.h \ include/openvswitch/match.h \ diff --git a/include/openvswitch/jsonrpc.h b/include/openvswitch/jsonrpc.h new file mode 100644 index 000000000000..82c9166476ef --- /dev/null +++ b/include/openvswitch/jsonrpc.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2009, 2010, 2012, 2013, 2017 Nicira, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OPENVSWITCH_JSONRPC_H +#define OPENVSWITCH_JSONRPC_H 1 + +/* This is an implementation of the JSON-RPC 1.0 specification defined at + * http://json-rpc.org/wiki/specification. */ + +#include <stdbool.h> +#include <stddef.h> +#include "openvswitch/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct json; +struct jsonrpc_msg; +struct pstream; +struct reconnect_stats; +struct stream; +struct svec; + +/* API for a JSON-RPC stream. */ + +/* Default port numbers. + * + * OVSDB_OLD_PORT defines the original port number used by OVS. + * OVSDB_PORT defines the official port number assigned by IANA. */ +#define OVSDB_OLD_PORT 6632 +#define OVSDB_PORT 6640 + +int jsonrpc_stream_open(const char *name, struct stream **, uint8_t dscp); +int jsonrpc_pstream_open(const char *name, struct pstream **, uint8_t dscp); + +struct jsonrpc *jsonrpc_open(struct stream *); +void jsonrpc_close(struct jsonrpc *); + +void jsonrpc_run(struct jsonrpc *); +void jsonrpc_wait(struct jsonrpc *); + +int jsonrpc_get_status(const struct jsonrpc *); +size_t jsonrpc_get_backlog(const struct jsonrpc *); +unsigned int jsonrpc_get_received_bytes(const struct jsonrpc *); +const char *jsonrpc_get_name(const struct jsonrpc *); + +int jsonrpc_send(struct jsonrpc *, struct jsonrpc_msg *); +int jsonrpc_recv(struct jsonrpc *, struct jsonrpc_msg **); +void jsonrpc_recv_wait(struct jsonrpc *); + +int jsonrpc_send_block(struct jsonrpc *, struct jsonrpc_msg *); +int jsonrpc_recv_block(struct jsonrpc *, struct jsonrpc_msg **); +int jsonrpc_transact_block(struct jsonrpc *, struct jsonrpc_msg *, + struct jsonrpc_msg **); + +/* Messages. */ +enum jsonrpc_msg_type { + JSONRPC_REQUEST, /* Request. */ + JSONRPC_NOTIFY, /* Notification. */ + JSONRPC_REPLY, /* Successful reply. */ + JSONRPC_ERROR /* Error reply. */ +}; + +struct jsonrpc_msg { + enum jsonrpc_msg_type type; + char *method; /* Request or notification only. */ + struct json *params; /* Request or notification only. */ + struct json *result; /* Successful reply only. */ + struct json *error; /* Error reply only. */ + struct json *id; /* Request or reply only. */ +}; + +struct jsonrpc_msg *jsonrpc_create_request(const char *method, + struct json *params, + struct json **idp); +struct jsonrpc_msg *jsonrpc_create_notify(const char *method, + struct json *params); +struct jsonrpc_msg *jsonrpc_create_reply(struct json *result, + const struct json *id); +struct jsonrpc_msg *jsonrpc_create_error(struct json *error, + const struct json *id); + +struct jsonrpc_msg *jsonrpc_msg_clone(const struct jsonrpc_msg *); + +const char *jsonrpc_msg_type_to_string(enum jsonrpc_msg_type); +char *jsonrpc_msg_is_valid(const struct jsonrpc_msg *); +void jsonrpc_msg_destroy(struct jsonrpc_msg *); + +char *jsonrpc_msg_from_json(struct json *, struct jsonrpc_msg **); +struct json *jsonrpc_msg_to_json(struct jsonrpc_msg *); + +char *jsonrpc_msg_to_string(const struct jsonrpc_msg *); + +/* A JSON-RPC session with reconnection. */ + +struct jsonrpc_session *jsonrpc_session_open(const char *name, bool retry); +struct jsonrpc_session *jsonrpc_session_open_multiple(const struct svec *, + bool retry); +struct jsonrpc_session *jsonrpc_session_open_unreliably(struct jsonrpc *, + uint8_t); +void jsonrpc_session_close(struct jsonrpc_session *); + +struct jsonrpc *jsonrpc_session_steal(struct jsonrpc_session *); + +void jsonrpc_session_run(struct jsonrpc_session *); +void jsonrpc_session_wait(struct jsonrpc_session *); + +size_t jsonrpc_session_get_backlog(const struct jsonrpc_session *); +const char *jsonrpc_session_get_name(const struct jsonrpc_session *); +size_t jsonrpc_session_get_n_remotes(const struct jsonrpc_session *); + +int jsonrpc_session_send(struct jsonrpc_session *, struct jsonrpc_msg *); +struct jsonrpc_msg *jsonrpc_session_recv(struct jsonrpc_session *); +void jsonrpc_session_recv_wait(struct jsonrpc_session *); + +bool jsonrpc_session_is_alive(const struct jsonrpc_session *); +bool jsonrpc_session_is_connected(const struct jsonrpc_session *); +unsigned int jsonrpc_session_get_seqno(const struct jsonrpc_session *); +int jsonrpc_session_get_status(const struct jsonrpc_session *); +int jsonrpc_session_get_last_error(const struct jsonrpc_session *); +void jsonrpc_session_get_reconnect_stats(const struct jsonrpc_session *, + struct reconnect_stats *); + +void jsonrpc_session_enable_reconnect(struct jsonrpc_session *); +void jsonrpc_session_force_reconnect(struct jsonrpc_session *); + +void jsonrpc_session_set_max_backoff(struct jsonrpc_session *, + int max_backoff); +void jsonrpc_session_set_probe_interval(struct jsonrpc_session *, + int probe_interval); +void jsonrpc_session_set_dscp(struct jsonrpc_session *, + uint8_t dscp); +const char *jsonrpc_session_get_id(const struct jsonrpc_session *); + +#ifdef __cplusplus +} +#endif + +#endif /* jsonrpc.h */ diff --git a/lib/automake.mk b/lib/automake.mk index 63e9d72ac18a..2333e1f50b96 100644 --- a/lib/automake.mk +++ b/lib/automake.mk @@ -111,7 +111,6 @@ lib_libopenvswitch_la_SOURCES = \ lib/jhash.h \ lib/json.c \ lib/jsonrpc.c \ - lib/jsonrpc.h \ lib/lacp.c \ lib/lacp.h \ lib/latch.h \ diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index 4c2c1ba84a32..1dde13b96c52 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -16,7 +16,7 @@ #include <config.h> -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include <errno.h> diff --git a/lib/jsonrpc.h b/lib/jsonrpc.h deleted file mode 100644 index a44114e8dcd9..000000000000 --- a/lib/jsonrpc.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2009, 2010, 2012, 2013, 2017 Nicira, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef JSONRPC_H -#define JSONRPC_H 1 - -/* This is an implementation of the JSON-RPC 1.0 specification defined at - * http://json-rpc.org/wiki/specification. */ - -#include <stdbool.h> -#include <stddef.h> -#include "openvswitch/types.h" - -struct json; -struct jsonrpc_msg; -struct pstream; -struct reconnect_stats; -struct stream; -struct svec; - -/* API for a JSON-RPC stream. */ - -/* Default port numbers. - * - * OVSDB_OLD_PORT defines the original port number used by OVS. - * OVSDB_PORT defines the official port number assigned by IANA. */ -#define OVSDB_OLD_PORT 6632 -#define OVSDB_PORT 6640 - -int jsonrpc_stream_open(const char *name, struct stream **, uint8_t dscp); -int jsonrpc_pstream_open(const char *name, struct pstream **, uint8_t dscp); - -struct jsonrpc *jsonrpc_open(struct stream *); -void jsonrpc_close(struct jsonrpc *); - -void jsonrpc_run(struct jsonrpc *); -void jsonrpc_wait(struct jsonrpc *); - -int jsonrpc_get_status(const struct jsonrpc *); -size_t jsonrpc_get_backlog(const struct jsonrpc *); -unsigned int jsonrpc_get_received_bytes(const struct jsonrpc *); -const char *jsonrpc_get_name(const struct jsonrpc *); - -int jsonrpc_send(struct jsonrpc *, struct jsonrpc_msg *); -int jsonrpc_recv(struct jsonrpc *, struct jsonrpc_msg **); -void jsonrpc_recv_wait(struct jsonrpc *); - -int jsonrpc_send_block(struct jsonrpc *, struct jsonrpc_msg *); -int jsonrpc_recv_block(struct jsonrpc *, struct jsonrpc_msg **); -int jsonrpc_transact_block(struct jsonrpc *, struct jsonrpc_msg *, - struct jsonrpc_msg **); - -/* Messages. */ -enum jsonrpc_msg_type { - JSONRPC_REQUEST, /* Request. */ - JSONRPC_NOTIFY, /* Notification. */ - JSONRPC_REPLY, /* Successful reply. */ - JSONRPC_ERROR /* Error reply. */ -}; - -struct jsonrpc_msg { - enum jsonrpc_msg_type type; - char *method; /* Request or notification only. */ - struct json *params; /* Request or notification only. */ - struct json *result; /* Successful reply only. */ - struct json *error; /* Error reply only. */ - struct json *id; /* Request or reply only. */ -}; - -struct jsonrpc_msg *jsonrpc_create_request(const char *method, - struct json *params, - struct json **idp); -struct jsonrpc_msg *jsonrpc_create_notify(const char *method, - struct json *params); -struct jsonrpc_msg *jsonrpc_create_reply(struct json *result, - const struct json *id); -struct jsonrpc_msg *jsonrpc_create_error(struct json *error, - const struct json *id); - -struct jsonrpc_msg *jsonrpc_msg_clone(const struct jsonrpc_msg *); - -const char *jsonrpc_msg_type_to_string(enum jsonrpc_msg_type); -char *jsonrpc_msg_is_valid(const struct jsonrpc_msg *); -void jsonrpc_msg_destroy(struct jsonrpc_msg *); - -char *jsonrpc_msg_from_json(struct json *, struct jsonrpc_msg **); -struct json *jsonrpc_msg_to_json(struct jsonrpc_msg *); - -char *jsonrpc_msg_to_string(const struct jsonrpc_msg *); - -/* A JSON-RPC session with reconnection. */ - -struct jsonrpc_session *jsonrpc_session_open(const char *name, bool retry); -struct jsonrpc_session *jsonrpc_session_open_multiple(const struct svec *, - bool retry); -struct jsonrpc_session *jsonrpc_session_open_unreliably(struct jsonrpc *, - uint8_t); -void jsonrpc_session_close(struct jsonrpc_session *); - -struct jsonrpc *jsonrpc_session_steal(struct jsonrpc_session *); - -void jsonrpc_session_run(struct jsonrpc_session *); -void jsonrpc_session_wait(struct jsonrpc_session *); - -size_t jsonrpc_session_get_backlog(const struct jsonrpc_session *); -const char *jsonrpc_session_get_name(const struct jsonrpc_session *); -size_t jsonrpc_session_get_n_remotes(const struct jsonrpc_session *); - -int jsonrpc_session_send(struct jsonrpc_session *, struct jsonrpc_msg *); -struct jsonrpc_msg *jsonrpc_session_recv(struct jsonrpc_session *); -void jsonrpc_session_recv_wait(struct jsonrpc_session *); - -bool jsonrpc_session_is_alive(const struct jsonrpc_session *); -bool jsonrpc_session_is_connected(const struct jsonrpc_session *); -unsigned int jsonrpc_session_get_seqno(const struct jsonrpc_session *); -int jsonrpc_session_get_status(const struct jsonrpc_session *); -int jsonrpc_session_get_last_error(const struct jsonrpc_session *); -void jsonrpc_session_get_reconnect_stats(const struct jsonrpc_session *, - struct reconnect_stats *); - -void jsonrpc_session_enable_reconnect(struct jsonrpc_session *); -void jsonrpc_session_force_reconnect(struct jsonrpc_session *); - -void jsonrpc_session_set_max_backoff(struct jsonrpc_session *, - int max_backoff); -void jsonrpc_session_set_probe_interval(struct jsonrpc_session *, - int probe_interval); -void jsonrpc_session_set_dscp(struct jsonrpc_session *, - uint8_t dscp); -const char *jsonrpc_session_get_id(const struct jsonrpc_session *); - -#endif /* jsonrpc.h */ diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 01a8d54ab2bb..8330d829edf6 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -29,7 +29,7 @@ #include "openvswitch/dynamic-string.h" #include "fatal-signal.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "ovsdb/ovsdb.h" #include "ovsdb/table.h" #include "ovsdb-data.h" diff --git a/lib/stream.c b/lib/stream.c index 4e15fe0c8aaf..71590ea19bd8 100644 --- a/lib/stream.c +++ b/lib/stream.c @@ -26,10 +26,10 @@ #include "coverage.h" #include "fatal-signal.h" #include "flow.h" -#include "jsonrpc.h" #include "openflow/nicira-ext.h" #include "openflow/openflow.h" #include "openvswitch/dynamic-string.h" +#include "openvswitch/jsonrpc.h" #include "openvswitch/ofp-print.h" #include "openvswitch/ofpbuf.h" #include "openvswitch/vlog.h" diff --git a/lib/unixctl.c b/lib/unixctl.c index 730bd043a9ff..bbd85a6d5df4 100644 --- a/lib/unixctl.c +++ b/lib/unixctl.c @@ -22,7 +22,7 @@ #include "dirs.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "openvswitch/list.h" #include "openvswitch/poll-loop.h" #include "openvswitch/shash.h" diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index eabd30308ac2..2f9cc96c2013 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -24,8 +24,8 @@ #include "db-ctl-base.h" #include "dirs.h" #include "fatal-signal.h" -#include "jsonrpc.h" #include "openvswitch/json.h" +#include "openvswitch/jsonrpc.h" #include "ovn/lib/acl-log.h" #include "ovn/lib/ovn-nb-idl.h" #include "ovn/lib/ovn-util.h" diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 7c7a277f0d49..470f6d1f5499 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -24,7 +24,7 @@ #include "openvswitch/dynamic-string.h" #include "monitor.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" #include "ovsdb.h" diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c index dd06e265e899..a3d115b76ab4 100644 --- a/ovsdb/monitor.c +++ b/ovsdb/monitor.c @@ -22,7 +22,7 @@ #include "column.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" #include "ovsdb.h" diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index 7c8a59d0e749..bfc7b8778871 100644 --- a/ovsdb/ovsdb-client.c +++ b/ovsdb/ovsdb-client.c @@ -35,7 +35,7 @@ #include "fatal-signal.h" #include "file.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "lib/table.h" #include "log.h" #include "ovsdb.h" diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 8d213b27aae1..79da637a934e 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -31,7 +31,7 @@ #include "file.h" #include "hash.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "jsonrpc-server.h" #include "openvswitch/list.h" #include "memory.h" diff --git a/ovsdb/raft-rpc.c b/ovsdb/raft-rpc.c index 13aee0c4bac5..7269c5c85e40 100644 --- a/ovsdb/raft-rpc.c +++ b/ovsdb/raft-rpc.c @@ -20,11 +20,11 @@ #include <stdlib.h> #include <string.h> #include "compiler.h" -#include "jsonrpc.h" #include "ovsdb-error.h" #include "ovsdb-parser.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/json.h" +#include "openvswitch/jsonrpc.h" #include "openvswitch/vlog.h" #include "sset.h" diff --git a/ovsdb/raft.c b/ovsdb/raft.c index 02ba763e5fc4..093e32b0c99d 100644 --- a/ovsdb/raft.c +++ b/ovsdb/raft.c @@ -23,11 +23,11 @@ #include <unistd.h> #include "hash.h" -#include "jsonrpc.h" #include "lockfile.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/hmap.h" #include "openvswitch/json.h" +#include "openvswitch/jsonrpc.h" #include "openvswitch/list.h" #include "openvswitch/poll-loop.h" #include "openvswitch/vlog.h" diff --git a/ovsdb/replication.c b/ovsdb/replication.c index 752b3c89c5f6..8acefa705b03 100644 --- a/ovsdb/replication.c +++ b/ovsdb/replication.c @@ -19,10 +19,10 @@ #include "condition.h" -#include "jsonrpc.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/hmap.h" #include "openvswitch/json.h" +#include "openvswitch/jsonrpc.h" #include "openvswitch/vlog.h" #include "ovsdb-error.h" #include "ovsdb.h" diff --git a/ovsdb/trigger.c b/ovsdb/trigger.c index 3f62dc96fec0..6fc4473573ea 100644 --- a/ovsdb/trigger.c +++ b/ovsdb/trigger.c @@ -22,7 +22,7 @@ #include "file.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "ovsdb.h" #include "ovsdb-error.h" #include "openvswitch/poll-loop.h" diff --git a/tests/oss-fuzz/json_parser_target.c b/tests/oss-fuzz/json_parser_target.c index e39e04a0d70a..7a87315baefe 100644 --- a/tests/oss-fuzz/json_parser_target.c +++ b/tests/oss-fuzz/json_parser_target.c @@ -1,7 +1,7 @@ #include <config.h> #include "fuzzer.h" -#include "jsonrpc.h" #include "openvswitch/json.h" +#include "openvswitch/jsonrpc.h" #include "ovsdb-error.h" #include "ovsdb/table.h" #include <assert.h> diff --git a/tests/test-jsonrpc.c b/tests/test-jsonrpc.c index 49d2b91bd0fb..c1eb2063dc67 100644 --- a/tests/test-jsonrpc.c +++ b/tests/test-jsonrpc.c @@ -16,7 +16,6 @@ #include <config.h> #undef NDEBUG -#include "jsonrpc.h" #include <errno.h> #include <fcntl.h> #include <getopt.h> @@ -25,6 +24,7 @@ #include "command-line.h" #include "daemon.h" #include "openvswitch/json.h" +#include "openvswitch/jsonrpc.h" #include "ovstest.h" #include "openvswitch/poll-loop.h" #include "stream-ssl.h" diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c index 453d88eabc8c..bf6bc84c17a0 100644 --- a/tests/test-ovsdb.c +++ b/tests/test-ovsdb.c @@ -26,7 +26,7 @@ #include "command-line.h" #include "openvswitch/dynamic-string.h" #include "openvswitch/json.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "ovsdb-data.h" #include "ovsdb-error.h" #include "ovsdb-idl.h" diff --git a/utilities/ovs-appctl.c b/utilities/ovs-appctl.c index ba0c172e6dad..0480d3f7af81 100644 --- a/utilities/ovs-appctl.c +++ b/utilities/ovs-appctl.c @@ -26,7 +26,7 @@ #include "daemon.h" #include "dirs.h" #include "openvswitch/dynamic-string.h" -#include "jsonrpc.h" +#include "openvswitch/jsonrpc.h" #include "process.h" #include "timeval.h" #include "unixctl.h" diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 706a07cc6fb9..82af47735e43 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -33,7 +33,6 @@ #include "openvswitch/hmap.h" #include "hmapx.h" #include "if-notifier.h" -#include "jsonrpc.h" #include "lacp.h" #include "mac-learning.h" #include "mcast-snooping.h" @@ -42,6 +41,7 @@ #include "ofproto/bond.h" #include "ofproto/ofproto.h" #include "openvswitch/dynamic-string.h" +#include "openvswitch/jsonrpc.h" #include "openvswitch/list.h" #include "openvswitch/meta-flow.h" #include "openvswitch/ofp-print.h" -- 2.7.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
