include/net/inetpeer.h
Source file repositories/reference/linux-study-clean/include/net/inetpeer.h
File Facts
- System
- Linux kernel
- Corpus path
include/net/inetpeer.h- Extension
.h- Size
- 3304 bytes
- Lines
- 151
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/types.hlinux/init.hlinux/jiffies.hlinux/spinlock.hlinux/rtnetlink.hnet/ipv6.hlinux/atomic.h
Detected Declarations
struct ipv4_addr_keystruct inetpeer_addrstruct inet_peerstruct inet_peer_basefunction inetpeer_set_addr_v4function inetpeer_get_addr_v4function inetpeer_set_addr_v6function inetpeer_addr_cmp
Annotated Snippet
struct ipv4_addr_key {
__be32 addr;
int vif;
};
#define INETPEER_MAXKEYSZ (sizeof(struct in6_addr) / sizeof(u32))
struct inetpeer_addr {
union {
struct ipv4_addr_key a4;
struct in6_addr a6;
u32 key[INETPEER_MAXKEYSZ];
};
__u16 family;
};
struct inet_peer {
struct rb_node rb_node;
struct inetpeer_addr daddr;
u32 metrics[RTAX_MAX];
u32 rate_tokens; /* rate limiting for ICMP */
u32 n_redirects;
unsigned long rate_last;
/*
* Once inet_peer is queued for deletion (refcnt == 0), following field
* is not available: rid
* We can share memory with rcu_head to help keep inet_peer small.
*/
union {
struct {
atomic_t rid; /* Frag reception counter */
};
struct rcu_head rcu;
};
/* following fields might be frequently dirtied */
__u32 dtime; /* the time of last use of not referenced entries */
refcount_t refcnt;
};
struct inet_peer_base {
struct rb_root rb_root;
seqlock_t lock;
int total;
};
void inet_peer_base_init(struct inet_peer_base *);
void inet_initpeers(void) __init;
#define INETPEER_METRICS_NEW (~(u32) 0)
static inline void inetpeer_set_addr_v4(struct inetpeer_addr *iaddr, __be32 ip)
{
iaddr->a4.addr = ip;
iaddr->a4.vif = 0;
iaddr->family = AF_INET;
}
static inline __be32 inetpeer_get_addr_v4(struct inetpeer_addr *iaddr)
{
return iaddr->a4.addr;
}
static inline void inetpeer_set_addr_v6(struct inetpeer_addr *iaddr,
struct in6_addr *in6)
{
iaddr->a6 = *in6;
iaddr->family = AF_INET6;
}
static inline struct in6_addr *inetpeer_get_addr_v6(struct inetpeer_addr *iaddr)
{
return &iaddr->a6;
}
/* can be called with or without local BH being disabled */
struct inet_peer *inet_getpeer(struct inet_peer_base *base,
const struct inetpeer_addr *daddr);
static inline struct inet_peer *inet_getpeer_v4(struct inet_peer_base *base,
__be32 v4daddr,
int vif)
{
struct inetpeer_addr daddr;
daddr.a4.addr = v4daddr;
daddr.a4.vif = vif;
daddr.family = AF_INET;
Annotation
- Immediate include surface: `linux/types.h`, `linux/init.h`, `linux/jiffies.h`, `linux/spinlock.h`, `linux/rtnetlink.h`, `net/ipv6.h`, `linux/atomic.h`.
- Detected declarations: `struct ipv4_addr_key`, `struct inetpeer_addr`, `struct inet_peer`, `struct inet_peer_base`, `function inetpeer_set_addr_v4`, `function inetpeer_get_addr_v4`, `function inetpeer_set_addr_v6`, `function inetpeer_addr_cmp`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.