/* Change notification. */
struct sset changed_ports; /* Ports that have changed. */
- struct nln_notifier port_notifier;
+ struct nln_notifier *port_notifier;
bool change_error;
/* Queue of unused ports. */
open_dpif(const struct dpif_linux_dp *dp, struct dpif **dpifp)
{
struct dpif_linux *dpif;
- int error;
int i;
dpif = xmalloc(sizeof *dpif);
- error = nln_notifier_register(nln, &dpif->port_notifier,
- dpif_linux_port_changed, dpif);
- if (error) {
+ dpif->port_notifier = nln_notifier_create(nln, dpif_linux_port_changed,
+ dpif);
+ if (!dpif->port_notifier) {
goto error_free;
}
error_free:
free(dpif);
- return error;
+ return EINVAL;
}
static void
{
struct dpif_linux *dpif = dpif_linux_cast(dpif_);
- if (nln) {
- nln_notifier_unregister(nln, &dpif->port_notifier);
- }
-
+ nln_notifier_destroy(dpif->port_notifier);
nl_sock_destroy(dpif->mc_sock);
sset_destroy(&dpif->changed_ports);
free(dpif->lru_bitmap);
dpif_linux_run(struct dpif *dpif OVS_UNUSED)
{
if (nln) {
- nln_notifier_run(nln);
+ nln_run(nln);
}
}
dpif_linux_wait(struct dpif *dpif OVS_UNUSED)
{
if (nln) {
- nln_notifier_wait(nln);
+ nln_wait(nln);
}
}
dpif_port->name = xstrdup(reply.name);
dpif_port->type = xstrdup(netdev_vport_get_netdev_type(&reply));
dpif_port->port_no = reply.port_no;
- if (reply.stats) {
- netdev_stats_from_rtnl_link_stats64(&dpif_port->stats,
- reply.stats);
- } else {
- memset(&dpif_port->stats, 0xff, sizeof dpif_port->stats);
- }
ofpbuf_delete(buf);
}
return error;
dpif_port->name = (char *) vport.name;
dpif_port->type = (char *) netdev_vport_get_netdev_type(&vport);
dpif_port->port_no = vport.port_no;
- if (vport.stats) {
- netdev_stats_from_rtnl_link_stats64(&dpif_port->stats, vport.stats);
- } else {
- memset(&dpif_port->stats, 0xff, sizeof dpif_port->stats);
- }
return 0;
}
[OVS_VPORT_ATTR_TYPE] = { .type = NL_A_U32 },
[OVS_VPORT_ATTR_NAME] = { .type = NL_A_STRING, .max_len = IFNAMSIZ },
[OVS_VPORT_ATTR_STATS] = { .type = NL_A_UNSPEC,
- .min_len = sizeof(struct rtnl_link_stats64),
- .max_len = sizeof(struct rtnl_link_stats64),
+ .min_len = sizeof(struct ovs_vport_stats),
+ .max_len = sizeof(struct ovs_vport_stats),
.optional = true },
[OVS_VPORT_ATTR_ADDRESS] = { .type = NL_A_UNSPEC,
.min_len = ETH_ADDR_LEN,
.max_len = ETH_ADDR_LEN,
.optional = true },
- [OVS_VPORT_ATTR_MTU] = { .type = NL_A_U32, .optional = true },
[OVS_VPORT_ATTR_OPTIONS] = { .type = NL_A_NESTED, .optional = true },
[OVS_VPORT_ATTR_IFINDEX] = { .type = NL_A_U32, .optional = true },
- [OVS_VPORT_ATTR_IFLINK] = { .type = NL_A_U32, .optional = true },
};
struct nlattr *a[ARRAY_SIZE(ovs_vport_policy)];
if (a[OVS_VPORT_ATTR_ADDRESS]) {
vport->address = nl_attr_get(a[OVS_VPORT_ATTR_ADDRESS]);
}
- if (a[OVS_VPORT_ATTR_MTU]) {
- vport->mtu = nl_attr_get_u32(a[OVS_VPORT_ATTR_MTU]);
- } else {
- vport->mtu = INT_MAX;
- }
if (a[OVS_VPORT_ATTR_OPTIONS]) {
vport->options = nl_attr_get(a[OVS_VPORT_ATTR_OPTIONS]);
vport->options_len = nl_attr_get_size(a[OVS_VPORT_ATTR_OPTIONS]);
if (a[OVS_VPORT_ATTR_IFINDEX]) {
vport->ifindex = nl_attr_get_u32(a[OVS_VPORT_ATTR_IFINDEX]);
}
- if (a[OVS_VPORT_ATTR_IFLINK]) {
- vport->iflink = nl_attr_get_u32(a[OVS_VPORT_ATTR_IFLINK]);
- }
return 0;
}
vport->address, ETH_ADDR_LEN);
}
- if (vport->mtu && vport->mtu != INT_MAX) {
- nl_msg_put_u32(buf, OVS_VPORT_ATTR_MTU, vport->mtu);
- }
-
if (vport->options) {
nl_msg_put_nested(buf, OVS_VPORT_ATTR_OPTIONS,
vport->options, vport->options_len);
if (vport->ifindex) {
nl_msg_put_u32(buf, OVS_VPORT_ATTR_IFINDEX, vport->ifindex);
}
-
- if (vport->iflink) {
- nl_msg_put_u32(buf, OVS_VPORT_ATTR_IFLINK, vport->iflink);
- }
}
/* Clears 'vport' to "empty" values. */