X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Fdatapath.c;h=7f313940181477c5c5b3651a19baf370b8763b2e;hb=a2af1e9dd995420730a334a610d53e381d259e54;hp=bb9696735cc45450b96e4a4f4b455461a44877ef;hpb=24ce832d5e076e5686b15d2aadd39e8c0818e932;p=sliver-openvswitch.git diff --git a/datapath/datapath.c b/datapath/datapath.c index bb9696735..7f3139401 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -62,8 +62,8 @@ #include "vport-internal_dev.h" #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) || \ - LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) -#error Kernels before 2.6.18 or after 3.2 are not supported by this version of Open vSwitch. + LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) +#error Kernels before 2.6.18 or after 3.3 are not supported by this version of Open vSwitch. #endif #define REHASH_FLOW_INTERVAL (10 * 60 * HZ) @@ -176,17 +176,17 @@ static int dp_fill_ifinfo(struct sk_buff *skb, hdr->ifi_flags = port->ops->get_dev_flags(port); hdr->ifi_change = 0; - NLA_PUT_STRING(skb, IFLA_IFNAME, port->ops->get_name(port)); - NLA_PUT_U32(skb, IFLA_MASTER, get_dpifindex(dp)); - NLA_PUT_U32(skb, IFLA_MTU, port->ops->get_mtu(port)); + if (nla_put_string(skb, IFLA_IFNAME, port->ops->get_name(port)) || + nla_put_u32(skb, IFLA_MASTER, get_dpifindex(dp)) || + nla_put_u32(skb, IFLA_MTU, port->ops->get_mtu(port)) || #ifdef IFLA_OPERSTATE - NLA_PUT_U8(skb, IFLA_OPERSTATE, - port->ops->is_running(port) - ? port->ops->get_operstate(port) - : IF_OPER_DOWN); + nla_put_u8(skb, IFLA_OPERSTATE, + port->ops->is_running(port) ? + port->ops->get_operstate(port) : + IF_OPER_DOWN) || #endif - - NLA_PUT(skb, IFLA_ADDRESS, ETH_ALEN, port->ops->get_addr(port)); + nla_put(skb, IFLA_ADDRESS, ETH_ALEN, port->ops->get_addr(port))) + goto nla_put_failure; return nlmsg_end(skb, nlh); @@ -918,15 +918,18 @@ static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp, tcp_flags = flow->tcp_flags; spin_unlock_bh(&flow->lock); - if (used) - NLA_PUT_U64(skb, OVS_FLOW_ATTR_USED, ovs_flow_used_time(used)); + if (used && + nla_put_u64(skb, OVS_FLOW_ATTR_USED, ovs_flow_used_time(used))) + goto nla_put_failure; - if (stats.n_packets) - NLA_PUT(skb, OVS_FLOW_ATTR_STATS, - sizeof(struct ovs_flow_stats), &stats); + if (stats.n_packets && + nla_put(skb, OVS_FLOW_ATTR_STATS, + sizeof(struct ovs_flow_stats), &stats)) + goto nla_put_failure; - if (tcp_flags) - NLA_PUT_U8(skb, OVS_FLOW_ATTR_TCP_FLAGS, tcp_flags); + if (tcp_flags && + nla_put_u8(skb, OVS_FLOW_ATTR_TCP_FLAGS, tcp_flags)) + goto nla_put_failure; /* If OVS_FLOW_ATTR_ACTIONS doesn't fit, skip dumping the actions if * this is the first flow to be dumped into 'skb'. This is unusual for @@ -1312,7 +1315,8 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb, goto nla_put_failure; get_dp_stats(dp, &dp_stats); - NLA_PUT(skb, OVS_DP_ATTR_STATS, sizeof(struct ovs_dp_stats), &dp_stats); + if (nla_put(skb, OVS_DP_ATTR_STATS, sizeof(struct ovs_dp_stats), &dp_stats)) + goto nla_put_failure; return genlmsg_end(skb, ovs_header); @@ -1668,17 +1672,20 @@ static int ovs_vport_cmd_fill_info(struct vport *vport, struct sk_buff *skb, ovs_header->dp_ifindex = get_dpifindex(vport->dp); - NLA_PUT_U32(skb, OVS_VPORT_ATTR_PORT_NO, vport->port_no); - NLA_PUT_U32(skb, OVS_VPORT_ATTR_TYPE, vport->ops->type); - NLA_PUT_STRING(skb, OVS_VPORT_ATTR_NAME, vport->ops->get_name(vport)); - NLA_PUT_U32(skb, OVS_VPORT_ATTR_UPCALL_PID, vport->upcall_pid); + if (nla_put_u32(skb, OVS_VPORT_ATTR_PORT_NO, vport->port_no) || + nla_put_u32(skb, OVS_VPORT_ATTR_TYPE, vport->ops->type) || + nla_put_string(skb, OVS_VPORT_ATTR_NAME, vport->ops->get_name(vport)) || + nla_put_u32(skb, OVS_VPORT_ATTR_UPCALL_PID, vport->upcall_pid)) + goto nla_put_failure; ovs_vport_get_stats(vport, &vport_stats); - NLA_PUT(skb, OVS_VPORT_ATTR_STATS, sizeof(struct ovs_vport_stats), - &vport_stats); + if (nla_put(skb, OVS_VPORT_ATTR_STATS, sizeof(struct ovs_vport_stats), + &vport_stats)) + goto nla_put_failure; - NLA_PUT(skb, OVS_VPORT_ATTR_ADDRESS, ETH_ALEN, - vport->ops->get_addr(vport)); + if (nla_put(skb, OVS_VPORT_ATTR_ADDRESS, ETH_ALEN, + vport->ops->get_addr(vport))) + goto nla_put_failure; err = ovs_vport_get_options(vport, skb); if (err == -EMSGSIZE) @@ -2164,7 +2171,7 @@ static int __init dp_init(void) BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > sizeof(dummy_skb->cb)); pr_info("Open vSwitch switching datapath %s, built "__DATE__" "__TIME__"\n", - VERSION BUILDNR); + VERSION); err = genl_exec_init(); if (err)