~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to include/net/protocol.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * INET         An implementation of the TCP/IP protocol suite for the LINUX
 
3
 *              operating system.  INET is implemented using the  BSD Socket
 
4
 *              interface as the means of communication with the user level.
 
5
 *
 
6
 *              Definitions for the protocol dispatcher.
 
7
 *
 
8
 * Version:     @(#)protocol.h  1.0.2   05/07/93
 
9
 *
 
10
 * Author:      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 
11
 *
 
12
 *              This program is free software; you can redistribute it and/or
 
13
 *              modify it under the terms of the GNU General Public License
 
14
 *              as published by the Free Software Foundation; either version
 
15
 *              2 of the License, or (at your option) any later version.
 
16
 *
 
17
 *      Changes:
 
18
 *              Alan Cox        :       Added a name field and a frag handler
 
19
 *                                      field for later.
 
20
 *              Alan Cox        :       Cleaned up, and sorted types.
 
21
 *              Pedro Roque     :       inet6 protocols
 
22
 */
 
23
 
 
24
#ifndef _PROTOCOL_H
 
25
#define _PROTOCOL_H
 
26
 
 
27
#include <linux/in6.h>
 
28
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
 
29
#include <linux/ipv6.h>
 
30
#endif
 
31
 
 
32
#define MAX_INET_PROTOS 256             /* Must be a power of 2         */
 
33
 
 
34
 
 
35
/* This is used to register protocols. */
 
36
struct net_protocol {
 
37
        int                     (*handler)(struct sk_buff *skb);
 
38
        void                    (*err_handler)(struct sk_buff *skb, u32 info);
 
39
        int                     (*gso_send_check)(struct sk_buff *skb);
 
40
        struct sk_buff         *(*gso_segment)(struct sk_buff *skb,
 
41
                                               u32 features);
 
42
        struct sk_buff        **(*gro_receive)(struct sk_buff **head,
 
43
                                               struct sk_buff *skb);
 
44
        int                     (*gro_complete)(struct sk_buff *skb);
 
45
        unsigned int            no_policy:1,
 
46
                                netns_ok:1;
 
47
};
 
48
 
 
49
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
 
50
struct inet6_protocol {
 
51
        int     (*handler)(struct sk_buff *skb);
 
52
 
 
53
        void    (*err_handler)(struct sk_buff *skb,
 
54
                               struct inet6_skb_parm *opt,
 
55
                               u8 type, u8 code, int offset,
 
56
                               __be32 info);
 
57
 
 
58
        int     (*gso_send_check)(struct sk_buff *skb);
 
59
        struct sk_buff *(*gso_segment)(struct sk_buff *skb,
 
60
                                       u32 features);
 
61
        struct sk_buff **(*gro_receive)(struct sk_buff **head,
 
62
                                        struct sk_buff *skb);
 
63
        int     (*gro_complete)(struct sk_buff *skb);
 
64
 
 
65
        unsigned int    flags;  /* INET6_PROTO_xxx */
 
66
};
 
67
 
 
68
#define INET6_PROTO_NOPOLICY    0x1
 
69
#define INET6_PROTO_FINAL       0x2
 
70
/* This should be set for any extension header which is compatible with GSO. */
 
71
#define INET6_PROTO_GSO_EXTHDR  0x4
 
72
#endif
 
73
 
 
74
/* This is used to register socket interfaces for IP protocols.  */
 
75
struct inet_protosw {
 
76
        struct list_head list;
 
77
 
 
78
        /* These two fields form the lookup key.  */
 
79
        unsigned short   type;     /* This is the 2nd argument to socket(2). */
 
80
        unsigned short   protocol; /* This is the L4 protocol number.  */
 
81
 
 
82
        struct proto     *prot;
 
83
        const struct proto_ops *ops;
 
84
  
 
85
        char             no_check;   /* checksum on rcv/xmit/none? */
 
86
        unsigned char    flags;      /* See INET_PROTOSW_* below.  */
 
87
};
 
88
#define INET_PROTOSW_REUSE 0x01      /* Are ports automatically reusable? */
 
89
#define INET_PROTOSW_PERMANENT 0x02  /* Permanent protocols are unremovable. */
 
90
#define INET_PROTOSW_ICSK      0x04  /* Is this an inet_connection_sock? */
 
91
 
 
92
extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS];
 
93
 
 
94
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
 
95
extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS];
 
96
#endif
 
97
 
 
98
extern int      inet_add_protocol(const struct net_protocol *prot, unsigned char num);
 
99
extern int      inet_del_protocol(const struct net_protocol *prot, unsigned char num);
 
100
extern void     inet_register_protosw(struct inet_protosw *p);
 
101
extern void     inet_unregister_protosw(struct inet_protosw *p);
 
102
 
 
103
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
 
104
extern int      inet6_add_protocol(const struct inet6_protocol *prot, unsigned char num);
 
105
extern int      inet6_del_protocol(const struct inet6_protocol *prot, unsigned char num);
 
106
extern int      inet6_register_protosw(struct inet_protosw *p);
 
107
extern void     inet6_unregister_protosw(struct inet_protosw *p);
 
108
#endif
 
109
 
 
110
#endif  /* _PROTOCOL_H */