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. Lunevstatic 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 Hellwigstatic 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