X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fjsonrpc-server.c;h=1149efd64beb7e0cef11b718b55f33d92060c9b2;hb=b363bae4f802a07efec6e012075caf915e1e4fe5;hp=279ea97e6cbb8d952d902e86adb55a5d9f753f65;hpb=b4e8d17057ff29183c026a7bbfc751520e1629f5;p=openvswitch diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 279ea97e..1149efd6 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -99,6 +99,7 @@ struct ovsdb_jsonrpc_remote { struct ovsdb_jsonrpc_server *server; struct pstream *listener; /* Listener, if passive. */ struct list sessions; /* List of "struct ovsdb_jsonrpc_session"s. */ + uint8_t dscp; }; static struct ovsdb_jsonrpc_remote *ovsdb_jsonrpc_server_add_remote( @@ -206,6 +207,7 @@ ovsdb_jsonrpc_server_add_remote(struct ovsdb_jsonrpc_server *svr, remote->server = svr; remote->listener = listener; list_init(&remote->sessions); + remote->dscp = options->dscp; shash_add(&svr->remotes, name, remote); if (!listener) { @@ -282,7 +284,8 @@ ovsdb_jsonrpc_server_run(struct ovsdb_jsonrpc_server *svr) error = pstream_accept(remote->listener, &stream); if (!error) { struct jsonrpc_session *js; - js = jsonrpc_session_open_unreliably(jsonrpc_open(stream)); + js = jsonrpc_session_open_unreliably(jsonrpc_open(stream), + remote->dscp); ovsdb_jsonrpc_session_create(remote, js); } else if (error != EAGAIN) { VLOG_WARN_RL(&rl, "%s: accept failed: %s", @@ -518,6 +521,22 @@ ovsdb_jsonrpc_session_set_all_options( { struct ovsdb_jsonrpc_session *s; + if (remote->listener) { + int error; + + error = pstream_set_dscp(remote->listener, options->dscp); + if (error) { + VLOG_ERR("%s: set_dscp failed %s", + pstream_get_name(remote->listener), strerror(error)); + } else { + remote->dscp = options->dscp; + } + /* + * TODO:XXX race window between setting dscp to listening socket + * and accepting socket. Accepted socket may have old dscp value. + * Ignore this race window for now. + */ + } LIST_FOR_EACH (s, node, &remote->sessions) { ovsdb_jsonrpc_session_set_options(s, options); }