drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c- Extension
.c- Size
- 19776 bytes
- Lines
- 643
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
net/ip_tunnels.hnet/ip6_tunnel.hnet/inet_ecn.hspectrum_ipip.hreg.h
Detected Declarations
function mlxsw_sp_ipip_netdev_parms4function mlxsw_sp_ipip_netdev_parms6function mlxsw_sp_ipip_parms4_has_ikeyfunction mlxsw_sp_ipip_parms6_has_ikeyfunction mlxsw_sp_ipip_parms4_has_okeyfunction mlxsw_sp_ipip_parms6_has_okeyfunction mlxsw_sp_ipip_parms4_ikeyfunction mlxsw_sp_ipip_parms6_ikeyfunction mlxsw_sp_ipip_parms4_okeyfunction mlxsw_sp_ipip_parms6_okeyfunction mlxsw_sp_ipip_parms4_saddrfunction mlxsw_sp_ipip_parms6_saddrfunction mlxsw_sp_ipip_parms4_daddrfunction mlxsw_sp_ipip_parms6_daddrfunction mlxsw_sp_ipip_netdev_saddrfunction mlxsw_sp_ipip_netdev_daddr4function mlxsw_sp_ipip_netdev_daddrfunction mlxsw_sp_l3addr_is_zerofunction mlxsw_sp_ipip_netdev_parms_init_gre4function mlxsw_sp_ipip_nexthop_update_gre4function mlxsw_sp_ipip_decap_config_gre4function mlxsw_sp_ipip_tunnel_completefunction mlxsw_sp_ipip_can_offload_gre4function mlxsw_sp_ipip_ol_loopback_config_gre4function mlxsw_sp_ipip_ol_netdev_change_grefunction mlxsw_sp_ipip_ol_netdev_change_gre4function mlxsw_sp_ipip_rem_addr_set_gre4function mlxsw_sp_ipip_rem_addr_unset_gre4function mlxsw_sp_ipip_netdev_parms_init_gre6function mlxsw_sp_ipip_nexthop_update_gre6function mlxsw_sp_ipip_decap_config_gre6function mlxsw_sp_ipip_can_offload_gre6function mlxsw_sp_ipip_ol_loopback_config_gre6function mlxsw_sp_ipip_ol_netdev_change_gre6function mlxsw_sp_ipip_rem_addr_set_gre6function mlxsw_sp_ipip_rem_addr_unset_gre6function mlxsw_sp_ipip_ecn_encap_init_onefunction mlxsw_sp_ipip_ecn_encap_initfunction mlxsw_sp_ipip_ecn_decap_init_onefunction mlxsw_sp_ipip_ecn_decap_initfunction mlxsw_sp_ipip_netdev_ul_dev_get
Annotated Snippet
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
/* Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved */
#include <net/ip_tunnels.h>
#include <net/ip6_tunnel.h>
#include <net/inet_ecn.h>
#include "spectrum_ipip.h"
#include "reg.h"
struct ip_tunnel_parm_kern
mlxsw_sp_ipip_netdev_parms4(const struct net_device *ol_dev)
{
struct ip_tunnel *tun = netdev_priv(ol_dev);
return tun->parms;
}
struct __ip6_tnl_parm
mlxsw_sp_ipip_netdev_parms6(const struct net_device *ol_dev)
{
struct ip6_tnl *tun = netdev_priv(ol_dev);
return tun->parms;
}
static bool
mlxsw_sp_ipip_parms4_has_ikey(const struct ip_tunnel_parm_kern *parms)
{
return test_bit(IP_TUNNEL_KEY_BIT, parms->i_flags);
}
static bool mlxsw_sp_ipip_parms6_has_ikey(const struct __ip6_tnl_parm *parms)
{
return test_bit(IP_TUNNEL_KEY_BIT, parms->i_flags);
}
static bool
mlxsw_sp_ipip_parms4_has_okey(const struct ip_tunnel_parm_kern *parms)
{
return test_bit(IP_TUNNEL_KEY_BIT, parms->o_flags);
}
static bool mlxsw_sp_ipip_parms6_has_okey(const struct __ip6_tnl_parm *parms)
{
return test_bit(IP_TUNNEL_KEY_BIT, parms->o_flags);
}
static u32 mlxsw_sp_ipip_parms4_ikey(const struct ip_tunnel_parm_kern *parms)
{
return mlxsw_sp_ipip_parms4_has_ikey(parms) ?
be32_to_cpu(parms->i_key) : 0;
}
static u32 mlxsw_sp_ipip_parms6_ikey(const struct __ip6_tnl_parm *parms)
{
return mlxsw_sp_ipip_parms6_has_ikey(parms) ?
be32_to_cpu(parms->i_key) : 0;
}
static u32 mlxsw_sp_ipip_parms4_okey(const struct ip_tunnel_parm_kern *parms)
{
return mlxsw_sp_ipip_parms4_has_okey(parms) ?
be32_to_cpu(parms->o_key) : 0;
}
static u32 mlxsw_sp_ipip_parms6_okey(const struct __ip6_tnl_parm *parms)
{
return mlxsw_sp_ipip_parms6_has_okey(parms) ?
be32_to_cpu(parms->o_key) : 0;
}
static union mlxsw_sp_l3addr
mlxsw_sp_ipip_parms4_saddr(const struct ip_tunnel_parm_kern *parms)
{
return (union mlxsw_sp_l3addr) { .addr4 = parms->iph.saddr };
}
static union mlxsw_sp_l3addr
mlxsw_sp_ipip_parms6_saddr(const struct __ip6_tnl_parm *parms)
{
return (union mlxsw_sp_l3addr) { .addr6 = parms->laddr };
}
static union mlxsw_sp_l3addr
mlxsw_sp_ipip_parms4_daddr(const struct ip_tunnel_parm_kern *parms)
{
return (union mlxsw_sp_l3addr) { .addr4 = parms->iph.daddr };
}
Annotation
- Immediate include surface: `net/ip_tunnels.h`, `net/ip6_tunnel.h`, `net/inet_ecn.h`, `spectrum_ipip.h`, `reg.h`.
- Detected declarations: `function mlxsw_sp_ipip_netdev_parms4`, `function mlxsw_sp_ipip_netdev_parms6`, `function mlxsw_sp_ipip_parms4_has_ikey`, `function mlxsw_sp_ipip_parms6_has_ikey`, `function mlxsw_sp_ipip_parms4_has_okey`, `function mlxsw_sp_ipip_parms6_has_okey`, `function mlxsw_sp_ipip_parms4_ikey`, `function mlxsw_sp_ipip_parms6_ikey`, `function mlxsw_sp_ipip_parms4_okey`, `function mlxsw_sp_ipip_parms6_okey`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.