[ovs-dev] [next 27/35] ofproto: Add a pointer to the owning ofproto to struct ofport.
Ben Pfaff
blp at nicira.com
Tue Apr 26 16:24:53 UTC 2011
This streamlines a few function calling interfaces.
---
ofproto/ofproto.c | 35 ++++++++++++++---------------------
1 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 301e811..b522d8b 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -100,6 +100,7 @@ COVERAGE_DEFINE(ofproto_update_port);
struct rule;
struct ofport {
+ struct ofproto *ofproto; /* Owning ofproto. */
struct hmap_node hmap_node; /* In struct ofproto's "ports" hmap. */
struct netdev *netdev;
struct ofp_phy_port opp;
@@ -108,7 +109,7 @@ struct ofport {
};
static void ofport_free(struct ofport *);
-static void ofport_run(struct ofproto *, struct ofport *);
+static void ofport_run(struct ofport *);
static void ofport_wait(struct ofport *);
struct action_xlate_ctx {
@@ -800,7 +801,7 @@ ofproto_run1(struct ofproto *p)
}
HMAP_FOR_EACH (ofport, hmap_node, &p->ports) {
- ofport_run(p, ofport);
+ ofport_run(ofport);
}
connmgr_run(p->connmgr, handle_openflow);
@@ -1293,6 +1294,7 @@ ofport_install(struct ofproto *p,
/* Create ofport. */
ofport = xmalloc(sizeof *ofport);
+ ofport->ofproto = p;
ofport->netdev = netdev;
ofport->opp = *opp;
ofport->odp_port = ofp_port_to_odp_port(ntohs(opp->port_no));
@@ -1309,19 +1311,10 @@ ofport_install(struct ofproto *p,
/* Removes 'ofport' from 'p' and destroys it. */
static void
-ofport_remove(struct ofproto *p, struct ofport *ofport)
+ofport_remove(struct ofport *ofport)
{
- connmgr_send_port_status(p->connmgr, &ofport->opp, OFPPR_DELETE);
-
- netdev_monitor_remove(p->netdev_monitor, ofport->netdev);
- hmap_remove(&p->ports, &ofport->hmap_node);
- shash_delete(&p->port_by_name,
- shash_find(&p->port_by_name,
- netdev_get_name(ofport->netdev)));
- if (p->sflow) {
- ofproto_sflow_del_port(p->sflow, ofport->odp_port);
- }
-
+ connmgr_send_port_status(ofport->ofproto->connmgr, &ofport->opp,
+ OFPPR_DELETE);
ofport_free(ofport);
}
@@ -1332,7 +1325,7 @@ ofport_remove_with_name(struct ofproto *ofproto, const char *name)
{
struct ofport *port = shash_find_data(&ofproto->port_by_name, name);
if (port) {
- ofport_remove(ofproto, port);
+ ofport_remove(port);
}
}
@@ -1341,7 +1334,7 @@ ofport_remove_with_name(struct ofproto *ofproto, const char *name)
* Does not handle a name or port number change. The caller must implement
* such a change as a delete followed by an add. */
static void
-ofport_modified(struct ofproto *ofproto, struct ofport *port,
+ofport_modified(struct ofport *port,
struct netdev *netdev, struct ofp_phy_port *opp)
{
memcpy(port->opp.hw_addr, opp->hw_addr, ETH_ADDR_LEN);
@@ -1359,11 +1352,11 @@ ofport_modified(struct ofproto *ofproto, struct ofport *port,
netdev_close(port->netdev);
port->netdev = netdev;
- connmgr_send_port_status(ofproto->connmgr, &port->opp, OFPPR_MODIFY);
+ connmgr_send_port_status(port->ofproto->connmgr, &port->opp, OFPPR_MODIFY);
}
static void
-ofport_run(struct ofproto *ofproto, struct ofport *ofport)
+ofport_run(struct ofport *ofport)
{
if (ofport->cfm) {
cfm_run(ofport->cfm);
@@ -1376,7 +1369,7 @@ ofport_run(struct ofproto *ofproto, struct ofport *ofport)
ccm = eth_compose(&packet, eth_addr_ccm, ofport->opp.hw_addr,
ETH_TYPE_CFM, sizeof *ccm);
cfm_compose_ccm(ofport->cfm, ccm);
- ofproto_send_packet(ofproto, ofport->odp_port, 0, &packet);
+ ofproto_send_packet(ofport->ofproto, ofport->odp_port, 0, &packet);
ofpbuf_uninit(&packet);
}
}
@@ -1433,7 +1426,7 @@ update_port(struct ofproto *ofproto, const char *name)
if (port && !strcmp(netdev_get_name(port->netdev), name)) {
/* 'name' hasn't changed location. Any properties changed? */
if (!ofport_equal(&port->opp, &opp)) {
- ofport_modified(ofproto, port, netdev, &opp);
+ ofport_modified(port, netdev, &opp);
} else {
netdev_close(netdev);
}
@@ -1442,7 +1435,7 @@ update_port(struct ofproto *ofproto, const char *name)
* we should delete it. If we think there's a port named 'name'
* then its port number must be wrong now so delete it too. */
if (port) {
- ofport_remove(ofproto, port);
+ ofport_remove(port);
}
ofport_remove_with_name(ofproto, name);
ofport_install(ofproto, netdev, &opp);
--
1.7.4.4
More information about the dev
mailing list