X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ofproto%2Fstatus.c;h=67cb27814f5b0efb2535f64d0ef00ed4c632e5c0;hb=e4add8967bd4fe1e78566ffbd2a61e8c2db6bc43;hp=b2cb93568abc91fc0872fd5bb914f8d8acdf6f7e;hpb=39fb08818bbd9c438dbf23caa89937c663451b5a;p=openvswitch diff --git a/ofproto/status.c b/ofproto/status.c index b2cb9356..67cb2781 100644 --- a/ofproto/status.c +++ b/ofproto/status.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009 Nicira Networks. + * Copyright (c) 2008, 2009, 2010 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ #include #include "dynamic-string.h" #include "list.h" +#include "ofp-util.h" #include "ofpbuf.h" #include "ofproto.h" #include "openflow/nicira-ext.h" @@ -32,10 +33,10 @@ #include "svec.h" #include "timeval.h" #include "vconn.h" - -#define THIS_MODULE VLM_status #include "vlog.h" +VLOG_DEFINE_THIS_MODULE(status); + struct status_category { struct list node; char *name; @@ -58,8 +59,9 @@ struct status_reply { int switch_status_handle_request(struct switch_status *ss, struct rconn *rconn, - struct nicira_header *request) + const struct ofp_header *oh) { + const struct nicira_header *request = (const struct nicira_header *) oh; struct status_category *c; struct nicira_header *reply; struct status_reply sr; @@ -69,17 +71,15 @@ switch_status_handle_request(struct switch_status *ss, struct rconn *rconn, sr.request.string = (void *) (request + 1); sr.request.length = ntohs(request->header.length) - sizeof *request; ds_init(&sr.output); - LIST_FOR_EACH (c, struct status_category, node, &ss->categories) { + LIST_FOR_EACH (c, node, &ss->categories) { if (!memcmp(c->name, sr.request.string, MIN(strlen(c->name), sr.request.length))) { sr.category = c; c->cb(&sr, c->aux); } } - reply = make_openflow_xid(sizeof *reply + sr.output.length, - OFPT_VENDOR, request->header.xid, &b); - reply->vendor = htonl(NX_VENDOR_ID); - reply->subtype = htonl(NXT_STATUS_REPLY); + reply = make_nxmsg_xid(sizeof *reply + sr.output.length, + NXT_STATUS_REPLY, request->header.xid, &b); memcpy(reply + 1, sr.output.string, sr.output.length); retval = rconn_send(rconn, b, NULL); if (retval && retval != EAGAIN) { @@ -97,13 +97,13 @@ rconn_status_cb(struct status_reply *sr, void *rconn_) uint32_t remote_ip = rconn_get_remote_ip(rconn); uint32_t local_ip = rconn_get_local_ip(rconn); - status_reply_put(sr, "name=%s", rconn_get_name(rconn)); + status_reply_put(sr, "name=%s", rconn_get_target(rconn)); if (remote_ip) { status_reply_put(sr, "remote-ip="IP_FMT, IP_ARGS(&remote_ip)); - status_reply_put(sr, "remote-port=%d", + status_reply_put(sr, "remote-port=%d", ntohs(rconn_get_remote_port(rconn))); status_reply_put(sr, "local-ip="IP_FMT, IP_ARGS(&local_ip)); - status_reply_put(sr, "local-port=%d", + status_reply_put(sr, "local-port=%d", ntohs(rconn_get_local_port(rconn))); } status_reply_put(sr, "state=%s", rconn_get_state(rconn)); @@ -130,36 +130,11 @@ static void config_status_cb(struct status_reply *sr, void *ofproto_) { const struct ofproto *ofproto = ofproto_; - uint64_t datapath_id, mgmt_id; - struct svec listeners; - int probe_interval, max_backoff; - size_t i; + uint64_t datapath_id; datapath_id = ofproto_get_datapath_id(ofproto); if (datapath_id) { - status_reply_put(sr, "datapath-id=%"PRIx64, datapath_id); - } - - mgmt_id = ofproto_get_mgmt_id(ofproto); - if (mgmt_id) { - status_reply_put(sr, "mgmt-id=%"PRIx64, mgmt_id); - } - - svec_init(&listeners); - ofproto_get_listeners(ofproto, &listeners); - for (i = 0; i < listeners.n; i++) { - status_reply_put(sr, "management%zu=%s", i, listeners.names[i]); - } - svec_destroy(&listeners); - - probe_interval = ofproto_get_probe_interval(ofproto); - if (probe_interval) { - status_reply_put(sr, "probe-interval=%d", probe_interval); - } - - max_backoff = ofproto_get_max_backoff(ofproto); - if (max_backoff) { - status_reply_put(sr, "max-backoff=%d", max_backoff); + status_reply_put(sr, "datapath-id=%016"PRIx64, datapath_id); } } @@ -177,7 +152,7 @@ switch_status_cb(struct status_reply *sr, void *ss_) struct switch_status * switch_status_create(const struct ofproto *ofproto) { - struct switch_status *ss = xcalloc(1, sizeof *ss); + struct switch_status *ss = xzalloc(sizeof *ss); ss->booted = time_now(); list_init(&ss->categories); ss->config_cat = switch_status_register(ss, "config", config_status_cb, @@ -194,8 +169,7 @@ switch_status_destroy(struct switch_status *ss) /* Orphan any remaining categories, so that unregistering them later * won't write to bad memory. */ struct status_category *c, *next; - LIST_FOR_EACH_SAFE (c, next, - struct status_category, node, &ss->categories) { + LIST_FOR_EACH_SAFE (c, next, node, &ss->categories) { list_init(&c->node); } switch_status_unregister(ss->config_cat);