#include <linux/uaccess.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/highmem.h>
#include <linux/slab.h>
#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/proc_fs.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <net/snmp.h>
#include <net/ip.h>
#include <net/protocol.h>
#include <net/route.h>
#include <net/xfrm.h>
#include <linux/skbuff.h>
#include <net/sock.h>
#include <net/arp.h>
#include <net/icmp.h>
#include <net/checksum.h>
#include <net/gso.h>
#include <net/inetpeer.h>
#include <net/inet_ecn.h>
#include <net/lwtunnel.h>
#include <linux/bpf-cgroup.h>
#include <linux/igmp.h>
#include <linux/netfilter_ipv4.h>
#include <linux/netfilter_bridge.h>
#include <linux/netlink.h>
#include <linux/tcp.h>
static int
ip_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
unsigned int mtu,
int (*output)(struct net *, struct sock *, struct sk_buff *));
void ip_send_check(struct iphdr *iph)
{ … }
EXPORT_SYMBOL(…);
int __ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
int ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
EXPORT_SYMBOL_GPL(…);
static inline int ip_select_ttl(const struct inet_sock *inet,
const struct dst_entry *dst)
{ … }
int ip_build_and_send_pkt(struct sk_buff *skb, const struct sock *sk,
__be32 saddr, __be32 daddr, struct ip_options_rcu *opt,
u8 tos)
{ … }
EXPORT_SYMBOL_GPL(…);
static int ip_finish_output2(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
static int ip_finish_output_gso(struct net *net, struct sock *sk,
struct sk_buff *skb, unsigned int mtu)
{ … }
static int __ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
static int ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
static int ip_mc_finish_output(struct net *net, struct sock *sk,
struct sk_buff *skb)
{ … }
int ip_mc_output(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
int ip_output(struct net *net, struct sock *sk, struct sk_buff *skb)
{ … }
EXPORT_SYMBOL(…);
static void ip_copy_addrs(struct iphdr *iph, const struct flowi4 *fl4)
{ … }
int __ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
__u8 tos)
{ … }
EXPORT_SYMBOL(…);
int ip_queue_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl)
{ … }
EXPORT_SYMBOL(…);
static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
{ … }
static int ip_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
unsigned int mtu,
int (*output)(struct net *, struct sock *, struct sk_buff *))
{ … }
void ip_fraglist_init(struct sk_buff *skb, struct iphdr *iph,
unsigned int hlen, struct ip_fraglist_iter *iter)
{ … }
EXPORT_SYMBOL(…);
void ip_fraglist_prepare(struct sk_buff *skb, struct ip_fraglist_iter *iter)
{ … }
EXPORT_SYMBOL(…);
void ip_frag_init(struct sk_buff *skb, unsigned int hlen,
unsigned int ll_rs, unsigned int mtu, bool DF,
struct ip_frag_state *state)
{ … }
EXPORT_SYMBOL(…);
static void ip_frag_ipcb(struct sk_buff *from, struct sk_buff *to,
bool first_frag)
{ … }
struct sk_buff *ip_frag_next(struct sk_buff *skb, struct ip_frag_state *state)
{ … }
EXPORT_SYMBOL(…);
int ip_do_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
int (*output)(struct net *, struct sock *, struct sk_buff *))
{ … }
EXPORT_SYMBOL(…);
int
ip_generic_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb)
{ … }
EXPORT_SYMBOL(…);
static int __ip_append_data(struct sock *sk,
struct flowi4 *fl4,
struct sk_buff_head *queue,
struct inet_cork *cork,
struct page_frag *pfrag,
int getfrag(void *from, char *to, int offset,
int len, int odd, struct sk_buff *skb),
void *from, int length, int transhdrlen,
unsigned int flags)
{ … }
static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
struct ipcm_cookie *ipc, struct rtable **rtp)
{ … }
int ip_append_data(struct sock *sk, struct flowi4 *fl4,
int getfrag(void *from, char *to, int offset, int len,
int odd, struct sk_buff *skb),
void *from, int length, int transhdrlen,
struct ipcm_cookie *ipc, struct rtable **rtp,
unsigned int flags)
{ … }
static void ip_cork_release(struct inet_cork *cork)
{ … }
struct sk_buff *__ip_make_skb(struct sock *sk,
struct flowi4 *fl4,
struct sk_buff_head *queue,
struct inet_cork *cork)
{ … }
int ip_send_skb(struct net *net, struct sk_buff *skb)
{ … }
int ip_push_pending_frames(struct sock *sk, struct flowi4 *fl4)
{ … }
static void __ip_flush_pending_frames(struct sock *sk,
struct sk_buff_head *queue,
struct inet_cork *cork)
{ … }
void ip_flush_pending_frames(struct sock *sk)
{ … }
struct sk_buff *ip_make_skb(struct sock *sk,
struct flowi4 *fl4,
int getfrag(void *from, char *to, int offset,
int len, int odd, struct sk_buff *skb),
void *from, int length, int transhdrlen,
struct ipcm_cookie *ipc, struct rtable **rtp,
struct inet_cork *cork, unsigned int flags)
{ … }
static int ip_reply_glue_bits(void *dptr, char *to, int offset,
int len, int odd, struct sk_buff *skb)
{ … }
void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
const struct ip_options *sopt,
__be32 daddr, __be32 saddr,
const struct ip_reply_arg *arg,
unsigned int len, u64 transmit_time, u32 txhash)
{ … }
void __init ip_init(void)
{ … }