xref: /openbmc/linux/include/linux/seq_file_net.h (revision 5f10376b)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c0f39322SDenis V. Lunev #ifndef __SEQ_FILE_NET_H__
3c0f39322SDenis V. Lunev #define __SEQ_FILE_NET_H__
4c0f39322SDenis V. Lunev 
5c0f39322SDenis V. Lunev #include <linux/seq_file.h>
6*5f10376bSJakub Kicinski #include <net/net_trackers.h>
7c0f39322SDenis V. Lunev 
8c0f39322SDenis V. Lunev struct net;
9c0f39322SDenis V. Lunev extern struct net init_net;
10c0f39322SDenis V. Lunev 
11c0f39322SDenis V. Lunev struct seq_net_private {
12c0f39322SDenis V. Lunev #ifdef CONFIG_NET_NS
13c0f39322SDenis V. Lunev 	struct net	*net;
1404a931e5SEric Dumazet 	netns_tracker	ns_tracker;
15c0f39322SDenis V. Lunev #endif
16c0f39322SDenis V. Lunev };
17c0f39322SDenis V. Lunev 
seq_file_net(struct seq_file * seq)18c0f39322SDenis V. Lunev static inline struct net *seq_file_net(struct seq_file *seq)
19c0f39322SDenis V. Lunev {
20c0f39322SDenis V. Lunev #ifdef CONFIG_NET_NS
21c0f39322SDenis V. Lunev 	return ((struct seq_net_private *)seq->private)->net;
22c0f39322SDenis V. Lunev #else
23c0f39322SDenis V. Lunev 	return &init_net;
24c0f39322SDenis V. Lunev #endif
25c0f39322SDenis V. Lunev }
26c0f39322SDenis V. Lunev 
27a2dcdee3SChristoph Hellwig /*
283617d949SChristoph Hellwig  * This one is needed for proc_create_net_single since net is stored directly
293617d949SChristoph Hellwig  * in private not as a struct i.e. seq_file_net can't be used.
30a2dcdee3SChristoph Hellwig  */
seq_file_single_net(struct seq_file * seq)31a2dcdee3SChristoph Hellwig static inline struct net *seq_file_single_net(struct seq_file *seq)
32a2dcdee3SChristoph Hellwig {
33a2dcdee3SChristoph Hellwig #ifdef CONFIG_NET_NS
34a2dcdee3SChristoph Hellwig 	return (struct net *)seq->private;
35a2dcdee3SChristoph Hellwig #else
36a2dcdee3SChristoph Hellwig 	return &init_net;
37a2dcdee3SChristoph Hellwig #endif
38a2dcdee3SChristoph Hellwig }
39a2dcdee3SChristoph Hellwig 
40c0f39322SDenis V. Lunev #endif
41