mirror of
https://github.com/torvalds/linux.git
synced 2025-11-03 10:10:33 +02:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge in late fixes to prepare for the 6.13 net-next PR. Conflicts: include/linux/phy.h41ffcd9501net: phy: fix phylib's dual eee_enabled721aa69e70net: phy: convert eee_broken_modes to a linkmode bitmap https://lore.kernel.org/all/20241118135512.1039208b@canb.auug.org.au/ drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c2160428bcbnet: txgbe: fix null pointer to pcs2160428bcbnet: txgbe: remove GPIO interrupt controller Adjacent commits: include/linux/phy.h41ffcd9501net: phy: fix phylib's dual eee_enabled516a5f11ebnet: phy: respect cached advertising when re-enabling EEE Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
dd7207838d
18 changed files with 102 additions and 30 deletions
|
|
@ -16091,7 +16091,9 @@ F: include/uapi/linux/net_shaper.h
|
||||||
F: include/uapi/linux/netdev*
|
F: include/uapi/linux/netdev*
|
||||||
F: tools/testing/selftests/drivers/net/
|
F: tools/testing/selftests/drivers/net/
|
||||||
X: Documentation/devicetree/bindings/net/bluetooth/
|
X: Documentation/devicetree/bindings/net/bluetooth/
|
||||||
|
X: Documentation/devicetree/bindings/net/can/
|
||||||
X: Documentation/devicetree/bindings/net/wireless/
|
X: Documentation/devicetree/bindings/net/wireless/
|
||||||
|
X: drivers/net/can/
|
||||||
X: drivers/net/wireless/
|
X: drivers/net/wireless/
|
||||||
|
|
||||||
NETWORKING DRIVERS (WIRELESS)
|
NETWORKING DRIVERS (WIRELESS)
|
||||||
|
|
@ -16180,6 +16182,7 @@ X: include/net/mac80211.h
|
||||||
X: include/net/wext.h
|
X: include/net/wext.h
|
||||||
X: net/9p/
|
X: net/9p/
|
||||||
X: net/bluetooth/
|
X: net/bluetooth/
|
||||||
|
X: net/can/
|
||||||
X: net/mac80211/
|
X: net/mac80211/
|
||||||
X: net/rfkill/
|
X: net/rfkill/
|
||||||
X: net/wireless/
|
X: net/wireless/
|
||||||
|
|
|
||||||
|
|
@ -1248,10 +1248,10 @@ gve_adminq_configure_flow_rule(struct gve_priv *priv,
|
||||||
sizeof(struct gve_adminq_configure_flow_rule),
|
sizeof(struct gve_adminq_configure_flow_rule),
|
||||||
flow_rule_cmd);
|
flow_rule_cmd);
|
||||||
|
|
||||||
if (err) {
|
if (err == -ETIME) {
|
||||||
dev_err(&priv->pdev->dev, "Timeout to configure the flow rule, trigger reset");
|
dev_err(&priv->pdev->dev, "Timeout to configure the flow rule, trigger reset");
|
||||||
gve_reset(priv, true);
|
gve_reset(priv, true);
|
||||||
} else {
|
} else if (!err) {
|
||||||
priv->flow_rules_cache.rules_cache_synced = false;
|
priv->flow_rules_cache.rules_cache_synced = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5299,7 +5299,7 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
flags_complete:
|
flags_complete:
|
||||||
bitmap_xor(changed_flags, pf->flags, orig_flags, I40E_PF_FLAGS_NBITS);
|
bitmap_xor(changed_flags, new_flags, orig_flags, I40E_PF_FLAGS_NBITS);
|
||||||
|
|
||||||
if (test_bit(I40E_FLAG_FW_LLDP_DIS, changed_flags))
|
if (test_bit(I40E_FLAG_FW_LLDP_DIS, changed_flags))
|
||||||
reset_needed = I40E_PF_RESET_AND_REBUILD_FLAG;
|
reset_needed = I40E_PF_RESET_AND_REBUILD_FLAG;
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,6 @@ static int fbnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
free_irqs:
|
free_irqs:
|
||||||
fbnic_free_irqs(fbd);
|
fbnic_free_irqs(fbd);
|
||||||
free_fbd:
|
free_fbd:
|
||||||
pci_disable_device(pdev);
|
|
||||||
fbnic_devlink_free(fbd);
|
fbnic_devlink_free(fbd);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
@ -367,7 +366,6 @@ static void fbnic_remove(struct pci_dev *pdev)
|
||||||
fbnic_fw_disable_mbx(fbd);
|
fbnic_fw_disable_mbx(fbd);
|
||||||
fbnic_free_irqs(fbd);
|
fbnic_free_irqs(fbd);
|
||||||
|
|
||||||
pci_disable_device(pdev);
|
|
||||||
fbnic_devlink_free(fbd);
|
fbnic_devlink_free(fbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ static struct phylink_pcs *txgbe_phylink_mac_select(struct phylink_config *confi
|
||||||
struct wx *wx = phylink_to_wx(config);
|
struct wx *wx = phylink_to_wx(config);
|
||||||
struct txgbe *txgbe = wx->priv;
|
struct txgbe *txgbe = wx->priv;
|
||||||
|
|
||||||
if (interface == PHY_INTERFACE_MODE_10GBASER)
|
if (wx->media_type != sp_media_copper)
|
||||||
return txgbe->pcs;
|
return txgbe->pcs;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
|
|
@ -153,18 +153,31 @@ struct dp83869_private {
|
||||||
int mode;
|
int mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int dp83869_config_aneg(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
struct dp83869_private *dp83869 = phydev->priv;
|
||||||
|
|
||||||
|
if (dp83869->mode != DP83869_RGMII_1000_BASE)
|
||||||
|
return genphy_config_aneg(phydev);
|
||||||
|
|
||||||
|
return genphy_c37_config_aneg(phydev);
|
||||||
|
}
|
||||||
|
|
||||||
static int dp83869_read_status(struct phy_device *phydev)
|
static int dp83869_read_status(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
struct dp83869_private *dp83869 = phydev->priv;
|
struct dp83869_private *dp83869 = phydev->priv;
|
||||||
|
bool changed;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (dp83869->mode == DP83869_RGMII_1000_BASE)
|
||||||
|
return genphy_c37_read_status(phydev, &changed);
|
||||||
|
|
||||||
ret = genphy_read_status(phydev);
|
ret = genphy_read_status(phydev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (linkmode_test_bit(ETHTOOL_LINK_MODE_FIBRE_BIT, phydev->supported)) {
|
if (dp83869->mode == DP83869_RGMII_100_BASE) {
|
||||||
if (phydev->link) {
|
if (phydev->link) {
|
||||||
if (dp83869->mode == DP83869_RGMII_100_BASE)
|
|
||||||
phydev->speed = SPEED_100;
|
phydev->speed = SPEED_100;
|
||||||
} else {
|
} else {
|
||||||
phydev->speed = SPEED_UNKNOWN;
|
phydev->speed = SPEED_UNKNOWN;
|
||||||
|
|
@ -898,6 +911,7 @@ static int dp83869_phy_reset(struct phy_device *phydev)
|
||||||
.soft_reset = dp83869_phy_reset, \
|
.soft_reset = dp83869_phy_reset, \
|
||||||
.config_intr = dp83869_config_intr, \
|
.config_intr = dp83869_config_intr, \
|
||||||
.handle_interrupt = dp83869_handle_interrupt, \
|
.handle_interrupt = dp83869_handle_interrupt, \
|
||||||
|
.config_aneg = dp83869_config_aneg, \
|
||||||
.read_status = dp83869_read_status, \
|
.read_status = dp83869_read_status, \
|
||||||
.get_tunable = dp83869_get_tunable, \
|
.get_tunable = dp83869_get_tunable, \
|
||||||
.set_tunable = dp83869_set_tunable, \
|
.set_tunable = dp83869_set_tunable, \
|
||||||
|
|
|
||||||
|
|
@ -941,7 +941,7 @@ EXPORT_SYMBOL_GPL(genphy_c45_read_eee_abilities);
|
||||||
*/
|
*/
|
||||||
int genphy_c45_an_config_eee_aneg(struct phy_device *phydev)
|
int genphy_c45_an_config_eee_aneg(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
if (!phydev->eee_enabled) {
|
if (!phydev->eee_cfg.eee_enabled) {
|
||||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(adv) = {};
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(adv) = {};
|
||||||
|
|
||||||
return genphy_c45_write_eee_adv(phydev, adv);
|
return genphy_c45_write_eee_adv(phydev, adv);
|
||||||
|
|
@ -1571,8 +1571,6 @@ int genphy_c45_ethtool_set_eee(struct phy_device *phydev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
phydev->eee_enabled = data->eee_enabled;
|
|
||||||
|
|
||||||
ret = genphy_c45_an_config_eee_aneg(phydev);
|
ret = genphy_c45_an_config_eee_aneg(phydev);
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
ret = phy_restart_aneg(phydev);
|
ret = phy_restart_aneg(phydev);
|
||||||
|
|
|
||||||
|
|
@ -3589,12 +3589,12 @@ static int phy_probe(struct device *dev)
|
||||||
/* There is no "enabled" flag. If PHY is advertising, assume it is
|
/* There is no "enabled" flag. If PHY is advertising, assume it is
|
||||||
* kind of enabled.
|
* kind of enabled.
|
||||||
*/
|
*/
|
||||||
phydev->eee_enabled = !linkmode_empty(phydev->advertising_eee);
|
phydev->eee_cfg.eee_enabled = !linkmode_empty(phydev->advertising_eee);
|
||||||
|
|
||||||
/* Some PHYs may advertise, by default, not support EEE modes. So,
|
/* Some PHYs may advertise, by default, not support EEE modes. So,
|
||||||
* we need to clean them.
|
* we need to clean them.
|
||||||
*/
|
*/
|
||||||
if (phydev->eee_enabled)
|
if (phydev->eee_cfg.eee_enabled)
|
||||||
linkmode_and(phydev->advertising_eee, phydev->supported_eee,
|
linkmode_and(phydev->advertising_eee, phydev->supported_eee,
|
||||||
phydev->advertising_eee);
|
phydev->advertising_eee);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ static inline void *netpoll_poll_lock(struct napi_struct *napi)
|
||||||
{
|
{
|
||||||
struct net_device *dev = napi->dev;
|
struct net_device *dev = napi->dev;
|
||||||
|
|
||||||
if (dev && dev->npinfo) {
|
if (dev && rcu_access_pointer(dev->npinfo)) {
|
||||||
int owner = smp_processor_id();
|
int owner = smp_processor_id();
|
||||||
|
|
||||||
while (cmpxchg(&napi->poll_owner, -1, owner) != -1)
|
while (cmpxchg(&napi->poll_owner, -1, owner) != -1)
|
||||||
|
|
|
||||||
|
|
@ -601,7 +601,6 @@ struct macsec_ops;
|
||||||
* @adv_old: Saved advertised while power saving for WoL
|
* @adv_old: Saved advertised while power saving for WoL
|
||||||
* @supported_eee: supported PHY EEE linkmodes
|
* @supported_eee: supported PHY EEE linkmodes
|
||||||
* @advertising_eee: Currently advertised EEE linkmodes
|
* @advertising_eee: Currently advertised EEE linkmodes
|
||||||
* @eee_enabled: Flag indicating whether the EEE feature is enabled
|
|
||||||
* @enable_tx_lpi: When True, MAC should transmit LPI to PHY
|
* @enable_tx_lpi: When True, MAC should transmit LPI to PHY
|
||||||
* @eee_cfg: User configuration of EEE
|
* @eee_cfg: User configuration of EEE
|
||||||
* @lp_advertising: Current link partner advertised linkmodes
|
* @lp_advertising: Current link partner advertised linkmodes
|
||||||
|
|
@ -723,7 +722,6 @@ struct phy_device {
|
||||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising_eee);
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising_eee);
|
||||||
/* Energy efficient ethernet modes which should be prohibited */
|
/* Energy efficient ethernet modes which should be prohibited */
|
||||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(eee_broken_modes);
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(eee_broken_modes);
|
||||||
bool eee_enabled;
|
|
||||||
bool enable_tx_lpi;
|
bool enable_tx_lpi;
|
||||||
struct eee_config eee_cfg;
|
struct eee_config eee_cfg;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,7 @@ int netdev_nl_napi_get_doit(struct sk_buff *skb, struct genl_info *info)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
rcu_read_lock();
|
||||||
|
|
||||||
napi = napi_by_id(napi_id);
|
napi = napi_by_id(napi_id);
|
||||||
if (napi) {
|
if (napi) {
|
||||||
|
|
@ -242,6 +243,7 @@ int netdev_nl_napi_get_doit(struct sk_buff *skb, struct genl_info *info)
|
||||||
err = -ENOENT;
|
err = -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rcu_read_unlock();
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
||||||
|
|
@ -634,7 +634,7 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ndev->npinfo) {
|
if (!rcu_access_pointer(ndev->npinfo)) {
|
||||||
npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL);
|
npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL);
|
||||||
if (!npinfo) {
|
if (!npinfo) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
|
|
||||||
|
|
@ -1117,9 +1117,9 @@ static void sk_psock_strp_data_ready(struct sock *sk)
|
||||||
if (tls_sw_has_ctx_rx(sk)) {
|
if (tls_sw_has_ctx_rx(sk)) {
|
||||||
psock->saved_data_ready(sk);
|
psock->saved_data_ready(sk);
|
||||||
} else {
|
} else {
|
||||||
write_lock_bh(&sk->sk_callback_lock);
|
read_lock_bh(&sk->sk_callback_lock);
|
||||||
strp_data_ready(&psock->strp);
|
strp_data_ready(&psock->strp);
|
||||||
write_unlock_bh(&sk->sk_callback_lock);
|
read_unlock_bh(&sk->sk_callback_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
|
||||||
|
|
@ -163,11 +163,8 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *tb[],
|
||||||
ret = ip_set_get_hostipaddr4(tb[IPSET_ATTR_IP_TO], &ip_to);
|
ret = ip_set_get_hostipaddr4(tb[IPSET_ATTR_IP_TO], &ip_to);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
if (ip > ip_to) {
|
if (ip > ip_to)
|
||||||
swap(ip, ip_to);
|
swap(ip, ip_to);
|
||||||
if (ip < map->first_ip)
|
|
||||||
return -IPSET_ERR_BITMAP_RANGE;
|
|
||||||
}
|
|
||||||
} else if (tb[IPSET_ATTR_CIDR]) {
|
} else if (tb[IPSET_ATTR_CIDR]) {
|
||||||
u8 cidr = nla_get_u8(tb[IPSET_ATTR_CIDR]);
|
u8 cidr = nla_get_u8(tb[IPSET_ATTR_CIDR]);
|
||||||
|
|
||||||
|
|
@ -178,7 +175,7 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *tb[],
|
||||||
ip_to = ip;
|
ip_to = ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ip_to > map->last_ip)
|
if (ip < map->first_ip || ip_to > map->last_ip)
|
||||||
return -IPSET_ERR_BITMAP_RANGE;
|
return -IPSET_ERR_BITMAP_RANGE;
|
||||||
|
|
||||||
for (; !before(ip_to, ip); ip += map->hosts) {
|
for (; !before(ip_to, ip); ip += map->hosts) {
|
||||||
|
|
|
||||||
|
|
@ -675,6 +675,8 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
|
||||||
len = desc->len;
|
len = desc->len;
|
||||||
|
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
|
first_frag = true;
|
||||||
|
|
||||||
hr = max(NET_SKB_PAD, L1_CACHE_ALIGN(dev->needed_headroom));
|
hr = max(NET_SKB_PAD, L1_CACHE_ALIGN(dev->needed_headroom));
|
||||||
tr = dev->needed_tailroom;
|
tr = dev->needed_tailroom;
|
||||||
skb = sock_alloc_send_skb(&xs->sk, hr + len + tr, 1, &err);
|
skb = sock_alloc_send_skb(&xs->sk, hr + len + tr, 1, &err);
|
||||||
|
|
@ -685,12 +687,8 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
|
||||||
skb_put(skb, len);
|
skb_put(skb, len);
|
||||||
|
|
||||||
err = skb_store_bits(skb, 0, buffer, len);
|
err = skb_store_bits(skb, 0, buffer, len);
|
||||||
if (unlikely(err)) {
|
if (unlikely(err))
|
||||||
kfree_skb(skb);
|
|
||||||
goto free_err;
|
goto free_err;
|
||||||
}
|
|
||||||
|
|
||||||
first_frag = true;
|
|
||||||
} else {
|
} else {
|
||||||
int nr_frags = skb_shinfo(skb)->nr_frags;
|
int nr_frags = skb_shinfo(skb)->nr_frags;
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
|
@ -758,6 +756,9 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
|
||||||
return skb;
|
return skb;
|
||||||
|
|
||||||
free_err:
|
free_err:
|
||||||
|
if (first_frag && skb)
|
||||||
|
kfree_skb(skb);
|
||||||
|
|
||||||
if (err == -EOVERFLOW) {
|
if (err == -EOVERFLOW) {
|
||||||
/* Drop the packet */
|
/* Drop the packet */
|
||||||
xsk_set_destructor_arg(xs->skb);
|
xsk_set_destructor_arg(xs->skb);
|
||||||
|
|
|
||||||
|
|
@ -501,6 +501,58 @@ static void test_sockmap_skb_verdict_shutdown(void)
|
||||||
test_sockmap_pass_prog__destroy(skel);
|
test_sockmap_pass_prog__destroy(skel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_sockmap_stream_pass(void)
|
||||||
|
{
|
||||||
|
int zero = 0, sent, recvd;
|
||||||
|
int verdict, parser;
|
||||||
|
int err, map;
|
||||||
|
int c = -1, p = -1;
|
||||||
|
struct test_sockmap_pass_prog *pass = NULL;
|
||||||
|
char snd[256] = "0123456789";
|
||||||
|
char rcv[256] = "0";
|
||||||
|
|
||||||
|
pass = test_sockmap_pass_prog__open_and_load();
|
||||||
|
verdict = bpf_program__fd(pass->progs.prog_skb_verdict);
|
||||||
|
parser = bpf_program__fd(pass->progs.prog_skb_parser);
|
||||||
|
map = bpf_map__fd(pass->maps.sock_map_rx);
|
||||||
|
|
||||||
|
err = bpf_prog_attach(parser, map, BPF_SK_SKB_STREAM_PARSER, 0);
|
||||||
|
if (!ASSERT_OK(err, "bpf_prog_attach stream parser"))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
err = bpf_prog_attach(verdict, map, BPF_SK_SKB_STREAM_VERDICT, 0);
|
||||||
|
if (!ASSERT_OK(err, "bpf_prog_attach stream verdict"))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
err = create_pair(AF_INET, SOCK_STREAM, &c, &p);
|
||||||
|
if (err)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
/* sk_data_ready of 'p' will be replaced by strparser handler */
|
||||||
|
err = bpf_map_update_elem(map, &zero, &p, BPF_NOEXIST);
|
||||||
|
if (!ASSERT_OK(err, "bpf_map_update_elem(p)"))
|
||||||
|
goto out_close;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* as 'prog_skb_parser' return the original skb len and
|
||||||
|
* 'prog_skb_verdict' return SK_PASS, the kernel will just
|
||||||
|
* pass it through to original socket 'p'
|
||||||
|
*/
|
||||||
|
sent = xsend(c, snd, sizeof(snd), 0);
|
||||||
|
ASSERT_EQ(sent, sizeof(snd), "xsend(c)");
|
||||||
|
|
||||||
|
recvd = recv_timeout(p, rcv, sizeof(rcv), SOCK_NONBLOCK,
|
||||||
|
IO_TIMEOUT_SEC);
|
||||||
|
ASSERT_EQ(recvd, sizeof(rcv), "recv_timeout(p)");
|
||||||
|
|
||||||
|
out_close:
|
||||||
|
close(c);
|
||||||
|
close(p);
|
||||||
|
|
||||||
|
out:
|
||||||
|
test_sockmap_pass_prog__destroy(pass);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_sockmap_skb_verdict_fionread(bool pass_prog)
|
static void test_sockmap_skb_verdict_fionread(bool pass_prog)
|
||||||
{
|
{
|
||||||
int err, map, verdict, c0 = -1, c1 = -1, p0 = -1, p1 = -1;
|
int err, map, verdict, c0 = -1, c1 = -1, p0 = -1, p1 = -1;
|
||||||
|
|
@ -923,6 +975,8 @@ void test_sockmap_basic(void)
|
||||||
test_sockmap_progs_query(BPF_SK_SKB_VERDICT);
|
test_sockmap_progs_query(BPF_SK_SKB_VERDICT);
|
||||||
if (test__start_subtest("sockmap skb_verdict shutdown"))
|
if (test__start_subtest("sockmap skb_verdict shutdown"))
|
||||||
test_sockmap_skb_verdict_shutdown();
|
test_sockmap_skb_verdict_shutdown();
|
||||||
|
if (test__start_subtest("sockmap stream parser and verdict pass"))
|
||||||
|
test_sockmap_stream_pass();
|
||||||
if (test__start_subtest("sockmap skb_verdict fionread"))
|
if (test__start_subtest("sockmap skb_verdict fionread"))
|
||||||
test_sockmap_skb_verdict_fionread(true);
|
test_sockmap_skb_verdict_fionread(true);
|
||||||
if (test__start_subtest("sockmap skb_verdict fionread on drop"))
|
if (test__start_subtest("sockmap skb_verdict fionread on drop"))
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,6 @@
|
||||||
audit_logread
|
audit_logread
|
||||||
connect_close
|
connect_close
|
||||||
conntrack_dump_flush
|
conntrack_dump_flush
|
||||||
|
conntrack_reverse_clash
|
||||||
sctp_collision
|
sctp_collision
|
||||||
nf_queue
|
nf_queue
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ static int build_cta_tuple_v4(struct nlmsghdr *nlh, int type,
|
||||||
mnl_attr_nest_end(nlh, nest_proto);
|
mnl_attr_nest_end(nlh, nest_proto);
|
||||||
|
|
||||||
mnl_attr_nest_end(nlh, nest);
|
mnl_attr_nest_end(nlh, nest);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int build_cta_tuple_v6(struct nlmsghdr *nlh, int type,
|
static int build_cta_tuple_v6(struct nlmsghdr *nlh, int type,
|
||||||
|
|
@ -71,6 +73,8 @@ static int build_cta_tuple_v6(struct nlmsghdr *nlh, int type,
|
||||||
mnl_attr_nest_end(nlh, nest_proto);
|
mnl_attr_nest_end(nlh, nest_proto);
|
||||||
|
|
||||||
mnl_attr_nest_end(nlh, nest);
|
mnl_attr_nest_end(nlh, nest);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int build_cta_proto(struct nlmsghdr *nlh)
|
static int build_cta_proto(struct nlmsghdr *nlh)
|
||||||
|
|
@ -90,6 +94,8 @@ static int build_cta_proto(struct nlmsghdr *nlh)
|
||||||
mnl_attr_nest_end(nlh, nest_proto);
|
mnl_attr_nest_end(nlh, nest_proto);
|
||||||
|
|
||||||
mnl_attr_nest_end(nlh, nest);
|
mnl_attr_nest_end(nlh, nest);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int conntrack_data_insert(struct mnl_socket *sock, struct nlmsghdr *nlh,
|
static int conntrack_data_insert(struct mnl_socket *sock, struct nlmsghdr *nlh,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue