net/core/utils.c
Source file repositories/reference/linux-study-clean/net/core/utils.c
File Facts
- System
- Linux kernel
- Corpus path
net/core/utils.c- Extension
.c- Size
- 11960 bytes
- Lines
- 488
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/module.hlinux/hex.hlinux/jiffies.hlinux/kernel.hlinux/ctype.hlinux/inet.hlinux/mm.hlinux/net.hlinux/string.hlinux/types.hlinux/percpu.hlinux/init.hlinux/ratelimit.hlinux/socket.hnet/sock.hnet/net_ratelimit.hnet/ipv6.hasm/byteorder.hlinux/uaccess.h
Detected Declarations
function printkfunction in_atonfunction xdigit2binfunction in4_ptonfunction in6_ptonfunction inet4_ptonfunction inet6_ptonfunction inet_pton_with_scopefunction inet_addr_is_anyfunction inet_proto_csum_replace4function inet_proto_csum_replace16function inet_proto_csum_replace_by_diffexport net_ratelimitexport in_atonexport in4_ptonexport in6_ptonexport inet_pton_with_scopeexport inet_addr_is_anyexport inet_proto_csum_replace4export inet_proto_csum_replace16export inet_proto_csum_replace_by_diff
Annotated Snippet
if (*str != '\0') {
val = 0;
while (*str != '\0' && *str != '.' && *str != '\n') {
val *= 10;
val += *str - '0';
str++;
}
l |= val;
if (*str != '\0')
str++;
}
}
return htonl(l);
}
EXPORT_SYMBOL(in_aton);
#define IN6PTON_XDIGIT 0x00010000
#define IN6PTON_DIGIT 0x00020000
#define IN6PTON_COLON_MASK 0x00700000
#define IN6PTON_COLON_1 0x00100000 /* single : requested */
#define IN6PTON_COLON_2 0x00200000 /* second : requested */
#define IN6PTON_COLON_1_2 0x00400000 /* :: requested */
#define IN6PTON_DOT 0x00800000 /* . */
#define IN6PTON_DELIM 0x10000000
#define IN6PTON_NULL 0x20000000 /* first/tail */
#define IN6PTON_UNKNOWN 0x40000000
static inline int xdigit2bin(char c, int delim)
{
int val;
if (c == delim || c == '\0')
return IN6PTON_DELIM;
if (c == ':')
return IN6PTON_COLON_MASK;
if (c == '.')
return IN6PTON_DOT;
val = hex_to_bin(c);
if (val >= 0)
return val | IN6PTON_XDIGIT | (val < 10 ? IN6PTON_DIGIT : 0);
if (delim == -1)
return IN6PTON_DELIM;
return IN6PTON_UNKNOWN;
}
/**
* in4_pton - convert an IPv4 address from literal to binary representation
* @src: the start of the IPv4 address string
* @srclen: the length of the string, -1 means strlen(src)
* @dst: the binary (u8[4] array) representation of the IPv4 address
* @delim: the delimiter of the IPv4 address in @src, -1 means no delimiter
* @end: A pointer to the end of the parsed string will be placed here
*
* Return one on success, return zero when any error occurs
* and @end will point to the end of the parsed string.
*
*/
int in4_pton(const char *src, int srclen,
u8 *dst,
int delim, const char **end)
{
const char *s;
u8 *d;
u8 dbuf[4];
int ret = 0;
int i;
int w = 0;
if (srclen < 0)
srclen = strlen(src);
s = src;
d = dbuf;
i = 0;
while (1) {
int c;
c = xdigit2bin(srclen > 0 ? *s : '\0', delim);
if (!(c & (IN6PTON_DIGIT | IN6PTON_DOT | IN6PTON_DELIM | IN6PTON_COLON_MASK))) {
goto out;
}
if (c & (IN6PTON_DOT | IN6PTON_DELIM | IN6PTON_COLON_MASK)) {
if (w == 0)
goto out;
*d++ = w & 0xff;
w = 0;
i++;
if (c & (IN6PTON_DELIM | IN6PTON_COLON_MASK)) {
if (i != 4)
goto out;
Annotation
- Immediate include surface: `linux/module.h`, `linux/hex.h`, `linux/jiffies.h`, `linux/kernel.h`, `linux/ctype.h`, `linux/inet.h`, `linux/mm.h`, `linux/net.h`.
- Detected declarations: `function printk`, `function in_aton`, `function xdigit2bin`, `function in4_pton`, `function in6_pton`, `function inet4_pton`, `function inet6_pton`, `function inet_pton_with_scope`, `function inet_addr_is_any`, `function inet_proto_csum_replace4`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration 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.