Loading net/openvswitch/datapath.c +17 −10 Original line number Diff line number Diff line Loading @@ -421,6 +421,19 @@ static int validate_sample(const struct nlattr *attr, return validate_actions(actions, key, depth + 1); } static int validate_tp_port(const struct sw_flow_key *flow_key) { if (flow_key->eth.type == htons(ETH_P_IP)) { if (flow_key->ipv4.tp.src && flow_key->ipv4.tp.dst) return 0; } else if (flow_key->eth.type == htons(ETH_P_IPV6)) { if (flow_key->ipv6.tp.src && flow_key->ipv6.tp.dst) return 0; } return -EINVAL; } static int validate_set(const struct nlattr *a, const struct sw_flow_key *flow_key) { Loading Loading @@ -462,18 +475,13 @@ static int validate_set(const struct nlattr *a, if (flow_key->ip.proto != IPPROTO_TCP) return -EINVAL; if (!flow_key->ipv4.tp.src || !flow_key->ipv4.tp.dst) return -EINVAL; break; return validate_tp_port(flow_key); case OVS_KEY_ATTR_UDP: if (flow_key->ip.proto != IPPROTO_UDP) return -EINVAL; if (!flow_key->ipv4.tp.src || !flow_key->ipv4.tp.dst) return -EINVAL; break; return validate_tp_port(flow_key); default: return -EINVAL; Loading Loading @@ -1641,10 +1649,9 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info) reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq, OVS_VPORT_CMD_NEW); if (IS_ERR(reply)) { err = PTR_ERR(reply); netlink_set_err(init_net.genl_sock, 0, ovs_dp_vport_multicast_group.id, err); return 0; ovs_dp_vport_multicast_group.id, PTR_ERR(reply)); goto exit_unlock; } genl_notify(reply, genl_info_net(info), info->snd_pid, Loading net/openvswitch/flow.c +2 −1 Original line number Diff line number Diff line Loading @@ -183,7 +183,8 @@ void ovs_flow_used(struct sw_flow *flow, struct sk_buff *skb) u8 tcp_flags = 0; if (flow->key.eth.type == htons(ETH_P_IP) && flow->key.ip.proto == IPPROTO_TCP) { flow->key.ip.proto == IPPROTO_TCP && likely(skb->len >= skb_transport_offset(skb) + sizeof(struct tcphdr))) { u8 *tcp = (u8 *)tcp_hdr(skb); tcp_flags = *(tcp + TCP_FLAGS_OFFSET) & TCP_FLAG_MASK; } Loading Loading
net/openvswitch/datapath.c +17 −10 Original line number Diff line number Diff line Loading @@ -421,6 +421,19 @@ static int validate_sample(const struct nlattr *attr, return validate_actions(actions, key, depth + 1); } static int validate_tp_port(const struct sw_flow_key *flow_key) { if (flow_key->eth.type == htons(ETH_P_IP)) { if (flow_key->ipv4.tp.src && flow_key->ipv4.tp.dst) return 0; } else if (flow_key->eth.type == htons(ETH_P_IPV6)) { if (flow_key->ipv6.tp.src && flow_key->ipv6.tp.dst) return 0; } return -EINVAL; } static int validate_set(const struct nlattr *a, const struct sw_flow_key *flow_key) { Loading Loading @@ -462,18 +475,13 @@ static int validate_set(const struct nlattr *a, if (flow_key->ip.proto != IPPROTO_TCP) return -EINVAL; if (!flow_key->ipv4.tp.src || !flow_key->ipv4.tp.dst) return -EINVAL; break; return validate_tp_port(flow_key); case OVS_KEY_ATTR_UDP: if (flow_key->ip.proto != IPPROTO_UDP) return -EINVAL; if (!flow_key->ipv4.tp.src || !flow_key->ipv4.tp.dst) return -EINVAL; break; return validate_tp_port(flow_key); default: return -EINVAL; Loading Loading @@ -1641,10 +1649,9 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, struct genl_info *info) reply = ovs_vport_cmd_build_info(vport, info->snd_pid, info->snd_seq, OVS_VPORT_CMD_NEW); if (IS_ERR(reply)) { err = PTR_ERR(reply); netlink_set_err(init_net.genl_sock, 0, ovs_dp_vport_multicast_group.id, err); return 0; ovs_dp_vport_multicast_group.id, PTR_ERR(reply)); goto exit_unlock; } genl_notify(reply, genl_info_net(info), info->snd_pid, Loading
net/openvswitch/flow.c +2 −1 Original line number Diff line number Diff line Loading @@ -183,7 +183,8 @@ void ovs_flow_used(struct sw_flow *flow, struct sk_buff *skb) u8 tcp_flags = 0; if (flow->key.eth.type == htons(ETH_P_IP) && flow->key.ip.proto == IPPROTO_TCP) { flow->key.ip.proto == IPPROTO_TCP && likely(skb->len >= skb_transport_offset(skb) + sizeof(struct tcphdr))) { u8 *tcp = (u8 *)tcp_hdr(skb); tcp_flags = *(tcp + TCP_FLAGS_OFFSET) & TCP_FLAG_MASK; } Loading