cregit-Linux how code gets into the kernel

Release 4.16 include/net/inetpeer.h

Directory: include/net
/* SPDX-License-Identifier: GPL-2.0 */
/*
 *              INETPEER - A storage for permanent information about peers
 *
 *  Authors:    Andrey V. Savochkin <saw@msu.ru>
 */

#ifndef _NET_INETPEER_H

#define _NET_INETPEER_H

#include <linux/types.h>
#include <linux/init.h>
#include <linux/jiffies.h>
#include <linux/spinlock.h>
#include <linux/rtnetlink.h>
#include <net/ipv6.h>
#include <linux/atomic.h>

/* IPv4 address key for cache lookups */

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 */
	
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; }

Contributors

PersonTokensPropCommitsCommitProp
David Ahern2978.38%266.67%
Eric Dumazet821.62%133.33%
Total37100.00%3100.00%


static inline __be32 inetpeer_get_addr_v4(struct inetpeer_addr *iaddr) { return iaddr->a4.addr; }

Contributors

PersonTokensPropCommitsCommitProp
David Ahern19100.00%2100.00%
Total19100.00%2100.00%


static inline void inetpeer_set_addr_v6(struct inetpeer_addr *iaddr, struct in6_addr *in6) { iaddr->a6 = *in6; iaddr->family = AF_INET6; }

Contributors

PersonTokensPropCommitsCommitProp
David Ahern30100.00%2100.00%
Total30100.00%2100.00%


static inline struct in6_addr *inetpeer_get_addr_v6(struct inetpeer_addr *iaddr) { return &iaddr->a6; }

Contributors

PersonTokensPropCommitsCommitProp
David Ahern20100.00%2100.00%
Total20100.00%2100.00%

/* 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, int create);
static inline struct inet_peer *inet_getpeer_v4(struct inet_peer_base *base, __be32 v4daddr, int vif, int create) { struct inetpeer_addr daddr; daddr.a4.addr = v4daddr; daddr.a4.vif = vif; daddr.family = AF_INET; return inet_getpeer(base, &daddr, create); }

Contributors

PersonTokensPropCommitsCommitProp
David S. Miller4270.00%350.00%
David Ahern1321.67%116.67%
Gao Feng58.33%233.33%
Total60100.00%6100.00%


static inline struct inet_peer *inet_getpeer_v6(struct inet_peer_base *base, const struct in6_addr *v6daddr, int create) { struct inetpeer_addr daddr; daddr.a6 = *v6daddr; daddr.family = AF_INET6; return inet_getpeer(base, &daddr, create); }

Contributors

PersonTokensPropCommitsCommitProp
David S. Miller4282.35%337.50%
Gao Feng59.80%225.00%
Alexey Dobriyan23.92%112.50%
David Ahern11.96%112.50%
Eric Dumazet11.96%112.50%
Total51100.00%8100.00%


static inline int inetpeer_addr_cmp(const struct inetpeer_addr *a, const struct inetpeer_addr *b) { int i, n; if (a->family == AF_INET) n = sizeof(a->a4) / sizeof(u32); else n = sizeof(a->a6) / sizeof(u32); for (i = 0; i < n; i++) { if (a->key[i] == b->key[i]) continue; if (a->key[i] < b->key[i]) return -1; return 1; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
David Ahern119100.00%2100.00%
Total119100.00%2100.00%

/* can be called from BH context or outside */ void inet_putpeer(struct inet_peer *p); bool inet_peer_xrlim_allow(struct inet_peer *peer, int timeout); void inetpeer_invalidate_tree(struct inet_peer_base *); #endif /* _NET_INETPEER_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
David Ahern25646.80%412.12%
David S. Miller16830.71%1030.30%
Linus Torvalds (pre-git)5710.42%13.03%
Eric Dumazet397.13%927.27%
Gao Feng152.74%26.06%
Steffen Klassert40.73%13.03%
Elena Reshetova20.37%13.03%
Alexey Dobriyan20.37%13.03%
Greg Kroah-Hartman10.18%13.03%
Arun Sharma10.18%13.03%
Adrian Bunk10.18%13.03%
Rusty Russell10.18%13.03%
Total547100.00%33100.00%
Directory: include/net
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.