net/vmw_vsock/vsock_addr.c
Source file repositories/reference/linux-study-clean/net/vmw_vsock/vsock_addr.c
File Facts
- System
- Linux kernel
- Corpus path
net/vmw_vsock/vsock_addr.c- Extension
.c- Size
- 1585 bytes
- Lines
- 70
- 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/types.hlinux/socket.hlinux/stddef.hnet/sock.hnet/vsock_addr.h
Detected Declarations
function Copyrightfunction vsock_addr_validatefunction vsock_addr_boundfunction vsock_addr_unbindfunction vsock_addr_equals_addrfunction vsock_addr_castexport vsock_addr_initexport vsock_addr_validateexport vsock_addr_boundexport vsock_addr_unbindexport vsock_addr_equals_addrexport vsock_addr_cast
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* VMware vSockets Driver
*
* Copyright (C) 2007-2012 VMware, Inc. All rights reserved.
*/
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/stddef.h>
#include <net/sock.h>
#include <net/vsock_addr.h>
void vsock_addr_init(struct sockaddr_vm *addr, u32 cid, u32 port)
{
memset(addr, 0, sizeof(*addr));
addr->svm_family = AF_VSOCK;
addr->svm_cid = cid;
addr->svm_port = port;
}
EXPORT_SYMBOL_GPL(vsock_addr_init);
int vsock_addr_validate(const struct sockaddr_vm *addr)
{
__u8 svm_valid_flags = VMADDR_FLAG_TO_HOST;
if (!addr)
return -EFAULT;
if (addr->svm_family != AF_VSOCK)
return -EAFNOSUPPORT;
if (addr->svm_flags & ~svm_valid_flags)
return -EINVAL;
return 0;
}
EXPORT_SYMBOL_GPL(vsock_addr_validate);
bool vsock_addr_bound(const struct sockaddr_vm *addr)
{
return addr->svm_port != VMADDR_PORT_ANY;
}
EXPORT_SYMBOL_GPL(vsock_addr_bound);
void vsock_addr_unbind(struct sockaddr_vm *addr)
{
vsock_addr_init(addr, VMADDR_CID_ANY, VMADDR_PORT_ANY);
}
EXPORT_SYMBOL_GPL(vsock_addr_unbind);
bool vsock_addr_equals_addr(const struct sockaddr_vm *addr,
const struct sockaddr_vm *other)
{
return addr->svm_cid == other->svm_cid &&
addr->svm_port == other->svm_port;
}
EXPORT_SYMBOL_GPL(vsock_addr_equals_addr);
int vsock_addr_cast(const struct sockaddr_unsized *addr,
size_t len, struct sockaddr_vm **out_addr)
{
if (len < sizeof(**out_addr))
return -EFAULT;
*out_addr = (struct sockaddr_vm *)addr;
return vsock_addr_validate(*out_addr);
}
EXPORT_SYMBOL_GPL(vsock_addr_cast);
Annotation
- Immediate include surface: `linux/types.h`, `linux/socket.h`, `linux/stddef.h`, `net/sock.h`, `net/vsock_addr.h`.
- Detected declarations: `function Copyright`, `function vsock_addr_validate`, `function vsock_addr_bound`, `function vsock_addr_unbind`, `function vsock_addr_equals_addr`, `function vsock_addr_cast`, `export vsock_addr_init`, `export vsock_addr_validate`, `export vsock_addr_bound`, `export vsock_addr_unbind`.
- 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.