drivers/net/ovpn/bind.h

Source file repositories/reference/linux-study-clean/drivers/net/ovpn/bind.h

File Facts

System
Linux kernel
Corpus path
drivers/net/ovpn/bind.h
Extension
.h
Size
2332 bytes
Lines
102
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct ovpn_bind {
	union ovpn_sockaddr remote;  /* remote sockaddr */

	union {
		struct in_addr ipv4;
		struct in6_addr ipv6;
	} local;

	struct rcu_head rcu;
};

/**
 * ovpn_bind_skb_src_match - match packet source with binding
 * @bind: the binding to match
 * @skb: the packet to match
 *
 * Return: true if the packet source matches the remote peer sockaddr
 * in the binding
 */
static inline bool ovpn_bind_skb_src_match(const struct ovpn_bind *bind,
					   const struct sk_buff *skb)
{
	const union ovpn_sockaddr *remote;

	if (unlikely(!bind))
		return false;

	remote = &bind->remote;

	switch (skb->protocol) {
	case htons(ETH_P_IP):
		if (unlikely(remote->in4.sin_family != AF_INET))
			return false;

		if (unlikely(remote->in4.sin_addr.s_addr != ip_hdr(skb)->saddr))
			return false;

		if (unlikely(remote->in4.sin_port != udp_hdr(skb)->source))
			return false;
		break;
	case htons(ETH_P_IPV6):
		if (unlikely(remote->in6.sin6_family != AF_INET6))
			return false;

		if (unlikely(!ipv6_addr_equal(&remote->in6.sin6_addr,
					      &ipv6_hdr(skb)->saddr)))
			return false;

		if (unlikely(remote->in6.sin6_port != udp_hdr(skb)->source))
			return false;
		break;
	default:
		return false;
	}

	return true;
}

struct ovpn_bind *ovpn_bind_from_sockaddr(const struct sockaddr_storage *sa);
void ovpn_bind_reset(struct ovpn_peer *peer, struct ovpn_bind *bind);

#endif /* _NET_OVPN_OVPNBIND_H_ */

Annotation

Implementation Notes