X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fjsonrpc.c;h=552de04c0771d2620b85f9613ddb8be2283c9526;hb=be2b69d14692718d1569b2b6fd03594be1a0f864;hp=0e1788cae2c37b28d29447af4d8e39a906d4a404;hpb=3a8d38c88e26f9f76f3c60efbcbead02240c26d0;p=openvswitch diff --git a/lib/jsonrpc.c b/lib/jsonrpc.c index 0e1788ca..552de04c 100644 --- a/lib/jsonrpc.c +++ b/lib/jsonrpc.c @@ -791,7 +791,7 @@ jsonrpc_session_open(const char *name) * On the assumption that such connections are likely to be short-lived * (e.g. from ovs-vsctl), informational logging for them is suppressed. */ struct jsonrpc_session * -jsonrpc_session_open_unreliably(struct jsonrpc *jsonrpc) +jsonrpc_session_open_unreliably(struct jsonrpc *jsonrpc, uint8_t dscp) { struct jsonrpc_session *s; @@ -801,7 +801,7 @@ jsonrpc_session_open_unreliably(struct jsonrpc *jsonrpc) reconnect_set_name(s->reconnect, jsonrpc_get_name(jsonrpc)); reconnect_set_max_tries(s->reconnect, 0); reconnect_connected(s->reconnect, time_msec()); - s->dscp = 0; + s->dscp = dscp; s->rpc = jsonrpc; s->stream = NULL; s->pstream = NULL; @@ -1093,6 +1093,20 @@ jsonrpc_session_set_dscp(struct jsonrpc_session *s, uint8_t dscp) { if (s->dscp != dscp) { + if (s->pstream) { + int error; + + error = pstream_set_dscp(s->pstream, dscp); + if (error) { + VLOG_ERR("%s: failed set_dscp %s", + reconnect_get_name(s->reconnect), strerror(error)); + } + /* + * 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. + */ + } s->dscp = dscp; jsonrpc_session_force_reconnect(s); }