diff options
Diffstat (limited to 'include/linux')
83 files changed, 2606 insertions, 795 deletions
diff --git a/include/linux/auxvec.h b/include/linux/auxvec.h index 9a7b374c9fb4..d2bc0d66e65d 100644 --- a/include/linux/auxvec.h +++ b/include/linux/auxvec.h | |||
@@ -26,6 +26,6 @@ | |||
26 | 26 | ||
27 | #define AT_SECURE 23 /* secure mode boolean */ | 27 | #define AT_SECURE 23 /* secure mode boolean */ |
28 | 28 | ||
29 | #define AT_VECTOR_SIZE 42 /* Size of auxiliary table. */ | 29 | #define AT_VECTOR_SIZE 44 /* Size of auxiliary table. */ |
30 | 30 | ||
31 | #endif /* _LINUX_AUXVEC_H */ | 31 | #endif /* _LINUX_AUXVEC_H */ |
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h index 4209082ee934..1698b845761f 100644 --- a/include/linux/compiler-gcc3.h +++ b/include/linux/compiler-gcc3.h | |||
@@ -13,3 +13,4 @@ | |||
13 | #define __must_check __attribute__((warn_unused_result)) | 13 | #define __must_check __attribute__((warn_unused_result)) |
14 | #endif | 14 | #endif |
15 | 15 | ||
16 | #define __always_inline inline __attribute__((always_inline)) | ||
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index e913e9beaf69..6f5cc6f0e7a6 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
@@ -3,7 +3,16 @@ | |||
3 | /* These definitions are for GCC v4.x. */ | 3 | /* These definitions are for GCC v4.x. */ |
4 | #include <linux/compiler-gcc.h> | 4 | #include <linux/compiler-gcc.h> |
5 | 5 | ||
6 | #ifdef CONFIG_FORCED_INLINING | ||
7 | # undef inline | ||
8 | # undef __inline__ | ||
9 | # undef __inline | ||
10 | # define inline inline __attribute__((always_inline)) | ||
11 | # define __inline__ __inline__ __attribute__((always_inline)) | ||
12 | # define __inline __inline __attribute__((always_inline)) | ||
13 | #endif | ||
14 | |||
6 | #define __attribute_used__ __attribute__((__used__)) | 15 | #define __attribute_used__ __attribute__((__used__)) |
7 | #define __must_check __attribute__((warn_unused_result)) | 16 | #define __must_check __attribute__((warn_unused_result)) |
8 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) | 17 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) |
9 | 18 | #define __always_inline inline __attribute__((always_inline)) | |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index c472f972bd6d..3bc606927116 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -48,6 +48,9 @@ extern void __cpuset_memory_pressure_bump(void); | |||
48 | extern struct file_operations proc_cpuset_operations; | 48 | extern struct file_operations proc_cpuset_operations; |
49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | 49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); |
50 | 50 | ||
51 | extern void cpuset_lock(void); | ||
52 | extern void cpuset_unlock(void); | ||
53 | |||
51 | #else /* !CONFIG_CPUSETS */ | 54 | #else /* !CONFIG_CPUSETS */ |
52 | 55 | ||
53 | static inline int cpuset_init_early(void) { return 0; } | 56 | static inline int cpuset_init_early(void) { return 0; } |
@@ -93,6 +96,9 @@ static inline char *cpuset_task_status_allowed(struct task_struct *task, | |||
93 | return buffer; | 96 | return buffer; |
94 | } | 97 | } |
95 | 98 | ||
99 | static inline void cpuset_lock(void) {} | ||
100 | static inline void cpuset_unlock(void) {} | ||
101 | |||
96 | #endif /* !CONFIG_CPUSETS */ | 102 | #endif /* !CONFIG_CPUSETS */ |
97 | 103 | ||
98 | #endif /* _LINUX_CPUSET_H */ | 104 | #endif /* _LINUX_CPUSET_H */ |
diff --git a/include/linux/device.h b/include/linux/device.h index 0cdee78e5ce1..58df18d9cd3e 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -49,6 +49,9 @@ struct bus_type { | |||
49 | int (*match)(struct device * dev, struct device_driver * drv); | 49 | int (*match)(struct device * dev, struct device_driver * drv); |
50 | int (*uevent)(struct device *dev, char **envp, | 50 | int (*uevent)(struct device *dev, char **envp, |
51 | int num_envp, char *buffer, int buffer_size); | 51 | int num_envp, char *buffer, int buffer_size); |
52 | int (*probe)(struct device * dev); | ||
53 | int (*remove)(struct device * dev); | ||
54 | void (*shutdown)(struct device * dev); | ||
52 | int (*suspend)(struct device * dev, pm_message_t state); | 55 | int (*suspend)(struct device * dev, pm_message_t state); |
53 | int (*resume)(struct device * dev); | 56 | int (*resume)(struct device * dev); |
54 | }; | 57 | }; |
diff --git a/include/linux/fb.h b/include/linux/fb.h index a973be2cfe61..2cb19e6503aa 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -608,15 +608,15 @@ struct fb_ops { | |||
608 | int (*fb_sync)(struct fb_info *info); | 608 | int (*fb_sync)(struct fb_info *info); |
609 | 609 | ||
610 | /* perform fb specific ioctl (optional) */ | 610 | /* perform fb specific ioctl (optional) */ |
611 | int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd, | 611 | int (*fb_ioctl)(struct fb_info *info, unsigned int cmd, |
612 | unsigned long arg, struct fb_info *info); | 612 | unsigned long arg); |
613 | 613 | ||
614 | /* Handle 32bit compat ioctl (optional) */ | 614 | /* Handle 32bit compat ioctl (optional) */ |
615 | long (*fb_compat_ioctl)(struct file *f, unsigned cmd, unsigned long arg, | 615 | int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd, |
616 | struct fb_info *info); | 616 | unsigned long arg); |
617 | 617 | ||
618 | /* perform fb specific mmap */ | 618 | /* perform fb specific mmap */ |
619 | int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma); | 619 | int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); |
620 | 620 | ||
621 | /* save current hardware state */ | 621 | /* save current hardware state */ |
622 | void (*fb_save_state)(struct fb_info *info); | 622 | void (*fb_save_state)(struct fb_info *info); |
diff --git a/include/linux/fs.h b/include/linux/fs.h index d1e370d25f7b..552cedfa6064 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1383,6 +1383,12 @@ extern int register_chrdev(unsigned int, const char *, | |||
1383 | extern int unregister_chrdev(unsigned int, const char *); | 1383 | extern int unregister_chrdev(unsigned int, const char *); |
1384 | extern void unregister_chrdev_region(dev_t, unsigned); | 1384 | extern void unregister_chrdev_region(dev_t, unsigned); |
1385 | extern int chrdev_open(struct inode *, struct file *); | 1385 | extern int chrdev_open(struct inode *, struct file *); |
1386 | extern int get_chrdev_list(char *); | ||
1387 | extern void *acquire_chrdev_list(void); | ||
1388 | extern int count_chrdev_list(void); | ||
1389 | extern void *get_next_chrdev(void *); | ||
1390 | extern int get_chrdev_info(void *, int *, char **); | ||
1391 | extern void release_chrdev_list(void *); | ||
1386 | 1392 | ||
1387 | /* fs/block_dev.c */ | 1393 | /* fs/block_dev.c */ |
1388 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ | 1394 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ |
@@ -1391,6 +1397,11 @@ extern const char *bdevname(struct block_device *bdev, char *buffer); | |||
1391 | extern struct block_device *lookup_bdev(const char *); | 1397 | extern struct block_device *lookup_bdev(const char *); |
1392 | extern struct block_device *open_bdev_excl(const char *, int, void *); | 1398 | extern struct block_device *open_bdev_excl(const char *, int, void *); |
1393 | extern void close_bdev_excl(struct block_device *); | 1399 | extern void close_bdev_excl(struct block_device *); |
1400 | extern void *acquire_blkdev_list(void); | ||
1401 | extern int count_blkdev_list(void); | ||
1402 | extern void *get_next_blkdev(void *); | ||
1403 | extern int get_blkdev_info(void *, int *, char **); | ||
1404 | extern void release_blkdev_list(void *); | ||
1394 | 1405 | ||
1395 | extern void init_special_inode(struct inode *, umode_t, dev_t); | 1406 | extern void init_special_inode(struct inode *, umode_t, dev_t); |
1396 | 1407 | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 71d2b8a723b9..eab537091f2a 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -93,10 +93,6 @@ extern void synchronize_irq(unsigned int irq); | |||
93 | struct task_struct; | 93 | struct task_struct; |
94 | 94 | ||
95 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | 95 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING |
96 | static inline void account_user_vtime(struct task_struct *tsk) | ||
97 | { | ||
98 | } | ||
99 | |||
100 | static inline void account_system_vtime(struct task_struct *tsk) | 96 | static inline void account_system_vtime(struct task_struct *tsk) |
101 | { | 97 | { |
102 | } | 98 | } |
diff --git a/include/linux/ide.h b/include/linux/ide.h index f2e1b5b22898..110b3cfac021 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -983,8 +983,13 @@ typedef struct ide_driver_s { | |||
983 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); | 983 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); |
984 | ide_proc_entry_t *proc; | 984 | ide_proc_entry_t *proc; |
985 | struct device_driver gen_driver; | 985 | struct device_driver gen_driver; |
986 | int (*probe)(ide_drive_t *); | ||
987 | void (*remove)(ide_drive_t *); | ||
988 | void (*shutdown)(ide_drive_t *); | ||
986 | } ide_driver_t; | 989 | } ide_driver_t; |
987 | 990 | ||
991 | #define to_ide_driver(drv) container_of(drv, ide_driver_t, gen_driver) | ||
992 | |||
988 | int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); | 993 | int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); |
989 | 994 | ||
990 | /* | 995 | /* |
diff --git a/include/linux/ioc3.h b/include/linux/ioc3.h new file mode 100644 index 000000000000..e7906a72a4f1 --- /dev/null +++ b/include/linux/ioc3.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (c) 2005 Stanislaw Skowronek <skylark@linux-mips.org> | ||
7 | */ | ||
8 | |||
9 | #ifndef _LINUX_IOC3_H | ||
10 | #define _LINUX_IOC3_H | ||
11 | |||
12 | #include <asm/sn/ioc3.h> | ||
13 | |||
14 | #define IOC3_MAX_SUBMODULES 32 | ||
15 | |||
16 | #define IOC3_CLASS_NONE 0 | ||
17 | #define IOC3_CLASS_BASE_IP27 1 | ||
18 | #define IOC3_CLASS_BASE_IP30 2 | ||
19 | #define IOC3_CLASS_MENET_123 3 | ||
20 | #define IOC3_CLASS_MENET_4 4 | ||
21 | #define IOC3_CLASS_CADDUO 5 | ||
22 | #define IOC3_CLASS_SERIAL 6 | ||
23 | |||
24 | /* One of these per IOC3 */ | ||
25 | struct ioc3_driver_data { | ||
26 | struct list_head list; | ||
27 | int id; /* IOC3 sequence number */ | ||
28 | /* PCI mapping */ | ||
29 | unsigned long pma; /* physical address */ | ||
30 | struct __iomem ioc3 *vma; /* pointer to registers */ | ||
31 | struct pci_dev *pdev; /* PCI device */ | ||
32 | /* IRQ stuff */ | ||
33 | int dual_irq; /* set if separate IRQs are used */ | ||
34 | int irq_io, irq_eth; /* IRQ numbers */ | ||
35 | /* GPIO magic */ | ||
36 | spinlock_t gpio_lock; | ||
37 | unsigned int gpdr_shadow; | ||
38 | /* NIC identifiers */ | ||
39 | char nic_part[32]; | ||
40 | char nic_serial[16]; | ||
41 | char nic_mac[6]; | ||
42 | /* submodule set */ | ||
43 | int class; | ||
44 | void *data[IOC3_MAX_SUBMODULES]; /* for submodule use */ | ||
45 | int active[IOC3_MAX_SUBMODULES]; /* set if probe succeeds */ | ||
46 | /* is_ir_lock must be held while | ||
47 | * modifying sio_ie values, so | ||
48 | * we can be sure that sio_ie is | ||
49 | * not changing when we read it | ||
50 | * along with sio_ir. | ||
51 | */ | ||
52 | spinlock_t ir_lock; /* SIO_IE[SC] mod lock */ | ||
53 | }; | ||
54 | |||
55 | /* One per submodule */ | ||
56 | struct ioc3_submodule { | ||
57 | char *name; /* descriptive submodule name */ | ||
58 | struct module *owner; /* owning kernel module */ | ||
59 | int ethernet; /* set for ethernet drivers */ | ||
60 | int (*probe) (struct ioc3_submodule *, struct ioc3_driver_data *); | ||
61 | int (*remove) (struct ioc3_submodule *, struct ioc3_driver_data *); | ||
62 | int id; /* assigned by IOC3, index for the "data" array */ | ||
63 | /* IRQ stuff */ | ||
64 | unsigned int irq_mask; /* IOC3 IRQ mask, leave clear for Ethernet */ | ||
65 | int reset_mask; /* non-zero if you want the ioc3.c module to reset interrupts */ | ||
66 | int (*intr) (struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int, struct pt_regs *); | ||
67 | /* private submodule data */ | ||
68 | void *data; /* assigned by submodule */ | ||
69 | }; | ||
70 | |||
71 | /********************************** | ||
72 | * Functions needed by submodules * | ||
73 | **********************************/ | ||
74 | |||
75 | #define IOC3_W_IES 0 | ||
76 | #define IOC3_W_IEC 1 | ||
77 | |||
78 | /* registers a submodule for all existing and future IOC3 chips */ | ||
79 | extern int ioc3_register_submodule(struct ioc3_submodule *); | ||
80 | /* unregisters a submodule */ | ||
81 | extern void ioc3_unregister_submodule(struct ioc3_submodule *); | ||
82 | /* enables IRQs indicated by irq_mask for a specified IOC3 chip */ | ||
83 | extern void ioc3_enable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); | ||
84 | /* ackowledges specified IRQs */ | ||
85 | extern void ioc3_ack(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); | ||
86 | /* disables IRQs indicated by irq_mask for a specified IOC3 chip */ | ||
87 | extern void ioc3_disable(struct ioc3_submodule *, struct ioc3_driver_data *, unsigned int); | ||
88 | /* atomically sets GPCR bits */ | ||
89 | extern void ioc3_gpcr_set(struct ioc3_driver_data *, unsigned int); | ||
90 | /* general ireg writer */ | ||
91 | extern void ioc3_write_ireg(struct ioc3_driver_data *idd, uint32_t value, int reg); | ||
92 | |||
93 | #endif | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index e6ee2d95da7a..323924edb26a 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -216,6 +216,7 @@ extern void dump_stack(void); | |||
216 | ((unsigned char *)&addr)[1], \ | 216 | ((unsigned char *)&addr)[1], \ |
217 | ((unsigned char *)&addr)[2], \ | 217 | ((unsigned char *)&addr)[2], \ |
218 | ((unsigned char *)&addr)[3] | 218 | ((unsigned char *)&addr)[3] |
219 | #define NIPQUAD_FMT "%u.%u.%u.%u" | ||
219 | 220 | ||
220 | #define NIP6(addr) \ | 221 | #define NIP6(addr) \ |
221 | ntohs((addr).s6_addr16[0]), \ | 222 | ntohs((addr).s6_addr16[0]), \ |
@@ -226,6 +227,7 @@ extern void dump_stack(void); | |||
226 | ntohs((addr).s6_addr16[5]), \ | 227 | ntohs((addr).s6_addr16[5]), \ |
227 | ntohs((addr).s6_addr16[6]), \ | 228 | ntohs((addr).s6_addr16[6]), \ |
228 | ntohs((addr).s6_addr16[7]) | 229 | ntohs((addr).s6_addr16[7]) |
230 | #define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x" | ||
229 | 231 | ||
230 | #if defined(__LITTLE_ENDIAN) | 232 | #if defined(__LITTLE_ENDIAN) |
231 | #define HIPQUAD(addr) \ | 233 | #define HIPQUAD(addr) \ |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index c7ac77e873b3..d6a53ed6ab6c 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
@@ -132,12 +132,8 @@ struct shared_policy { | |||
132 | spinlock_t lock; | 132 | spinlock_t lock; |
133 | }; | 133 | }; |
134 | 134 | ||
135 | static inline void mpol_shared_policy_init(struct shared_policy *info) | 135 | void mpol_shared_policy_init(struct shared_policy *info, int policy, |
136 | { | 136 | nodemask_t *nodes); |
137 | info->root = RB_ROOT; | ||
138 | spin_lock_init(&info->lock); | ||
139 | } | ||
140 | |||
141 | int mpol_set_shared_policy(struct shared_policy *info, | 137 | int mpol_set_shared_policy(struct shared_policy *info, |
142 | struct vm_area_struct *vma, | 138 | struct vm_area_struct *vma, |
143 | struct mempolicy *new); | 139 | struct mempolicy *new); |
@@ -211,7 +207,8 @@ static inline int mpol_set_shared_policy(struct shared_policy *info, | |||
211 | return -EINVAL; | 207 | return -EINVAL; |
212 | } | 208 | } |
213 | 209 | ||
214 | static inline void mpol_shared_policy_init(struct shared_policy *info) | 210 | static inline void mpol_shared_policy_init(struct shared_policy *info, |
211 | int policy, nodemask_t *nodes) | ||
215 | { | 212 | { |
216 | } | 213 | } |
217 | 214 | ||
diff --git a/include/linux/mm.h b/include/linux/mm.h index c643016499a1..85854b867463 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -512,7 +512,7 @@ static inline void set_page_links(struct page *page, unsigned long zone, | |||
512 | extern struct page *mem_map; | 512 | extern struct page *mem_map; |
513 | #endif | 513 | #endif |
514 | 514 | ||
515 | static inline void *lowmem_page_address(struct page *page) | 515 | static __always_inline void *lowmem_page_address(struct page *page) |
516 | { | 516 | { |
517 | return __va(page_to_pfn(page) << PAGE_SHIFT); | 517 | return __va(page_to_pfn(page) << PAGE_SHIFT); |
518 | } | 518 | } |
diff --git a/include/linux/ncp_fs.h b/include/linux/ncp_fs.h index 7297e4372c0f..e01342568530 100644 --- a/include/linux/ncp_fs.h +++ b/include/linux/ncp_fs.h | |||
@@ -201,34 +201,6 @@ static inline struct ncp_inode_info *NCP_FINFO(struct inode *inode) | |||
201 | return container_of(inode, struct ncp_inode_info, vfs_inode); | 201 | return container_of(inode, struct ncp_inode_info, vfs_inode); |
202 | } | 202 | } |
203 | 203 | ||
204 | #ifdef DEBUG_NCP_MALLOC | ||
205 | |||
206 | #include <linux/slab.h> | ||
207 | |||
208 | extern int ncp_malloced; | ||
209 | extern int ncp_current_malloced; | ||
210 | |||
211 | static inline void * | ||
212 | ncp_kmalloc(unsigned int size, int priority) | ||
213 | { | ||
214 | ncp_malloced += 1; | ||
215 | ncp_current_malloced += 1; | ||
216 | return kmalloc(size, priority); | ||
217 | } | ||
218 | |||
219 | static inline void ncp_kfree_s(void *obj, int size) | ||
220 | { | ||
221 | ncp_current_malloced -= 1; | ||
222 | kfree(obj); | ||
223 | } | ||
224 | |||
225 | #else /* DEBUG_NCP_MALLOC */ | ||
226 | |||
227 | #define ncp_kmalloc(s,p) kmalloc(s,p) | ||
228 | #define ncp_kfree_s(o,s) kfree(o) | ||
229 | |||
230 | #endif /* DEBUG_NCP_MALLOC */ | ||
231 | |||
232 | /* linux/fs/ncpfs/inode.c */ | 204 | /* linux/fs/ncpfs/inode.c */ |
233 | int ncp_notify_change(struct dentry *, struct iattr *); | 205 | int ncp_notify_change(struct dentry *, struct iattr *); |
234 | struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *); | 206 | struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *); |
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 6d39b518486b..3ff88c878308 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
@@ -154,6 +154,9 @@ struct ip_conntrack_stat | |||
154 | unsigned int expect_delete; | 154 | unsigned int expect_delete; |
155 | }; | 155 | }; |
156 | 156 | ||
157 | /* call to create an explicit dependency on nf_conntrack. */ | ||
158 | extern void need_conntrack(void); | ||
159 | |||
157 | #endif /* __KERNEL__ */ | 160 | #endif /* __KERNEL__ */ |
158 | 161 | ||
159 | #endif /* _NF_CONNTRACK_COMMON_H */ | 162 | #endif /* _NF_CONNTRACK_COMMON_H */ |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h new file mode 100644 index 000000000000..472f04834809 --- /dev/null +++ b/include/linux/netfilter/x_tables.h | |||
@@ -0,0 +1,224 @@ | |||
1 | #ifndef _X_TABLES_H | ||
2 | #define _X_TABLES_H | ||
3 | |||
4 | #define XT_FUNCTION_MAXNAMELEN 30 | ||
5 | #define XT_TABLE_MAXNAMELEN 32 | ||
6 | |||
7 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision | ||
8 | * kernel supports, if >= revision. */ | ||
9 | struct xt_get_revision | ||
10 | { | ||
11 | char name[XT_FUNCTION_MAXNAMELEN-1]; | ||
12 | |||
13 | u_int8_t revision; | ||
14 | }; | ||
15 | |||
16 | /* CONTINUE verdict for targets */ | ||
17 | #define XT_CONTINUE 0xFFFFFFFF | ||
18 | |||
19 | /* For standard target */ | ||
20 | #define XT_RETURN (-NF_REPEAT - 1) | ||
21 | |||
22 | #define XT_ALIGN(s) (((s) + (__alignof__(void *)-1)) & ~(__alignof__(void *)-1)) | ||
23 | |||
24 | /* Standard return verdict, or do jump. */ | ||
25 | #define XT_STANDARD_TARGET "" | ||
26 | /* Error verdict. */ | ||
27 | #define XT_ERROR_TARGET "ERROR" | ||
28 | |||
29 | /* | ||
30 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | ||
31 | * Unlike BSD Linux inherits IP options so you don't have to use a raw | ||
32 | * socket for this. Instead we check rights in the calls. */ | ||
33 | #define XT_BASE_CTL 64 /* base for firewall socket options */ | ||
34 | |||
35 | #define XT_SO_SET_REPLACE (XT_BASE_CTL) | ||
36 | #define XT_SO_SET_ADD_COUNTERS (XT_BASE_CTL + 1) | ||
37 | #define XT_SO_SET_MAX XT_SO_SET_ADD_COUNTERS | ||
38 | |||
39 | #define XT_SO_GET_INFO (XT_BASE_CTL) | ||
40 | #define XT_SO_GET_ENTRIES (XT_BASE_CTL + 1) | ||
41 | #define XT_SO_GET_REVISION_MATCH (XT_BASE_CTL + 2) | ||
42 | #define XT_SO_GET_REVISION_TARGET (XT_BASE_CTL + 3) | ||
43 | #define XT_SO_GET_MAX XT_SO_GET_REVISION_TARGET | ||
44 | |||
45 | #define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0) | ||
46 | #define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0) | ||
47 | |||
48 | struct xt_counters | ||
49 | { | ||
50 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
51 | }; | ||
52 | |||
53 | /* The argument to IPT_SO_ADD_COUNTERS. */ | ||
54 | struct xt_counters_info | ||
55 | { | ||
56 | /* Which table. */ | ||
57 | char name[XT_TABLE_MAXNAMELEN]; | ||
58 | |||
59 | unsigned int num_counters; | ||
60 | |||
61 | /* The counters (actually `number' of these). */ | ||
62 | struct xt_counters counters[0]; | ||
63 | }; | ||
64 | |||
65 | #define XT_INV_PROTO 0x40 /* Invert the sense of PROTO. */ | ||
66 | |||
67 | #ifdef __KERNEL__ | ||
68 | |||
69 | #include <linux/netdevice.h> | ||
70 | |||
71 | #define ASSERT_READ_LOCK(x) | ||
72 | #define ASSERT_WRITE_LOCK(x) | ||
73 | #include <linux/netfilter_ipv4/listhelp.h> | ||
74 | |||
75 | struct xt_match | ||
76 | { | ||
77 | struct list_head list; | ||
78 | |||
79 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | ||
80 | |||
81 | u_int8_t revision; | ||
82 | |||
83 | /* Return true or false: return FALSE and set *hotdrop = 1 to | ||
84 | force immediate packet drop. */ | ||
85 | /* Arguments changed since 2.6.9, as this must now handle | ||
86 | non-linear skb, using skb_header_pointer and | ||
87 | skb_ip_make_writable. */ | ||
88 | int (*match)(const struct sk_buff *skb, | ||
89 | const struct net_device *in, | ||
90 | const struct net_device *out, | ||
91 | const void *matchinfo, | ||
92 | int offset, | ||
93 | unsigned int protoff, | ||
94 | int *hotdrop); | ||
95 | |||
96 | /* Called when user tries to insert an entry of this type. */ | ||
97 | /* Should return true or false. */ | ||
98 | int (*checkentry)(const char *tablename, | ||
99 | const void *ip, | ||
100 | void *matchinfo, | ||
101 | unsigned int matchinfosize, | ||
102 | unsigned int hook_mask); | ||
103 | |||
104 | /* Called when entry of this type deleted. */ | ||
105 | void (*destroy)(void *matchinfo, unsigned int matchinfosize); | ||
106 | |||
107 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
108 | struct module *me; | ||
109 | }; | ||
110 | |||
111 | /* Registration hooks for targets. */ | ||
112 | struct xt_target | ||
113 | { | ||
114 | struct list_head list; | ||
115 | |||
116 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | ||
117 | |||
118 | u_int8_t revision; | ||
119 | |||
120 | /* Returns verdict. Argument order changed since 2.6.9, as this | ||
121 | must now handle non-linear skbs, using skb_copy_bits and | ||
122 | skb_ip_make_writable. */ | ||
123 | unsigned int (*target)(struct sk_buff **pskb, | ||
124 | const struct net_device *in, | ||
125 | const struct net_device *out, | ||
126 | unsigned int hooknum, | ||
127 | const void *targinfo, | ||
128 | void *userdata); | ||
129 | |||
130 | /* Called when user tries to insert an entry of this type: | ||
131 | hook_mask is a bitmask of hooks from which it can be | ||
132 | called. */ | ||
133 | /* Should return true or false. */ | ||
134 | int (*checkentry)(const char *tablename, | ||
135 | const void *entry, | ||
136 | void *targinfo, | ||
137 | unsigned int targinfosize, | ||
138 | unsigned int hook_mask); | ||
139 | |||
140 | /* Called when entry of this type deleted. */ | ||
141 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
142 | |||
143 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
144 | struct module *me; | ||
145 | }; | ||
146 | |||
147 | /* Furniture shopping... */ | ||
148 | struct xt_table | ||
149 | { | ||
150 | struct list_head list; | ||
151 | |||
152 | /* A unique name... */ | ||
153 | char name[XT_TABLE_MAXNAMELEN]; | ||
154 | |||
155 | /* What hooks you will enter on */ | ||
156 | unsigned int valid_hooks; | ||
157 | |||
158 | /* Lock for the curtain */ | ||
159 | rwlock_t lock; | ||
160 | |||
161 | /* Man behind the curtain... */ | ||
162 | //struct ip6t_table_info *private; | ||
163 | void *private; | ||
164 | |||
165 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
166 | struct module *me; | ||
167 | |||
168 | int af; /* address/protocol family */ | ||
169 | }; | ||
170 | |||
171 | #include <linux/netfilter_ipv4.h> | ||
172 | |||
173 | /* The table itself */ | ||
174 | struct xt_table_info | ||
175 | { | ||
176 | /* Size per table */ | ||
177 | unsigned int size; | ||
178 | /* Number of entries: FIXME. --RR */ | ||
179 | unsigned int number; | ||
180 | /* Initial number of entries. Needed for module usage count */ | ||
181 | unsigned int initial_entries; | ||
182 | |||
183 | /* Entry points and underflows */ | ||
184 | unsigned int hook_entry[NF_IP_NUMHOOKS]; | ||
185 | unsigned int underflow[NF_IP_NUMHOOKS]; | ||
186 | |||
187 | /* ipt_entry tables: one per CPU */ | ||
188 | char *entries[NR_CPUS]; | ||
189 | }; | ||
190 | |||
191 | extern int xt_register_target(int af, struct xt_target *target); | ||
192 | extern void xt_unregister_target(int af, struct xt_target *target); | ||
193 | extern int xt_register_match(int af, struct xt_match *target); | ||
194 | extern void xt_unregister_match(int af, struct xt_match *target); | ||
195 | |||
196 | extern int xt_register_table(struct xt_table *table, | ||
197 | struct xt_table_info *bootstrap, | ||
198 | struct xt_table_info *newinfo); | ||
199 | extern void *xt_unregister_table(struct xt_table *table); | ||
200 | |||
201 | extern struct xt_table_info *xt_replace_table(struct xt_table *table, | ||
202 | unsigned int num_counters, | ||
203 | struct xt_table_info *newinfo, | ||
204 | int *error); | ||
205 | |||
206 | extern struct xt_match *xt_find_match(int af, const char *name, u8 revision); | ||
207 | extern struct xt_target *xt_find_target(int af, const char *name, u8 revision); | ||
208 | extern struct xt_target *xt_request_find_target(int af, const char *name, | ||
209 | u8 revision); | ||
210 | extern int xt_find_revision(int af, const char *name, u8 revision, int target, | ||
211 | int *err); | ||
212 | |||
213 | extern struct xt_table *xt_find_table_lock(int af, const char *name); | ||
214 | extern void xt_table_unlock(struct xt_table *t); | ||
215 | |||
216 | extern int xt_proto_init(int af); | ||
217 | extern void xt_proto_fini(int af); | ||
218 | |||
219 | extern struct xt_table_info *xt_alloc_table_info(unsigned int size); | ||
220 | extern void xt_free_table_info(struct xt_table_info *info); | ||
221 | |||
222 | #endif /* __KERNEL__ */ | ||
223 | |||
224 | #endif /* _X_TABLES_H */ | ||
diff --git a/include/linux/netfilter/xt_CLASSIFY.h b/include/linux/netfilter/xt_CLASSIFY.h new file mode 100644 index 000000000000..58111355255d --- /dev/null +++ b/include/linux/netfilter/xt_CLASSIFY.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_CLASSIFY_H | ||
2 | #define _XT_CLASSIFY_H | ||
3 | |||
4 | struct xt_classify_target_info { | ||
5 | u_int32_t priority; | ||
6 | }; | ||
7 | |||
8 | #endif /*_XT_CLASSIFY_H */ | ||
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h new file mode 100644 index 000000000000..9f744689fffc --- /dev/null +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _XT_CONNMARK_H_target | ||
2 | #define _XT_CONNMARK_H_target | ||
3 | |||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | enum { | ||
14 | XT_CONNMARK_SET = 0, | ||
15 | XT_CONNMARK_SAVE, | ||
16 | XT_CONNMARK_RESTORE | ||
17 | }; | ||
18 | |||
19 | struct xt_connmark_target_info { | ||
20 | unsigned long mark; | ||
21 | unsigned long mask; | ||
22 | u_int8_t mode; | ||
23 | }; | ||
24 | |||
25 | #endif /*_XT_CONNMARK_H_target*/ | ||
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h new file mode 100644 index 000000000000..b021e93ee5d6 --- /dev/null +++ b/include/linux/netfilter/xt_MARK.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef _XT_MARK_H_target | ||
2 | #define _XT_MARK_H_target | ||
3 | |||
4 | /* Version 0 */ | ||
5 | struct xt_mark_target_info { | ||
6 | unsigned long mark; | ||
7 | }; | ||
8 | |||
9 | /* Version 1 */ | ||
10 | enum { | ||
11 | XT_MARK_SET=0, | ||
12 | XT_MARK_AND, | ||
13 | XT_MARK_OR, | ||
14 | }; | ||
15 | |||
16 | struct xt_mark_target_info_v1 { | ||
17 | unsigned long mark; | ||
18 | u_int8_t mode; | ||
19 | }; | ||
20 | |||
21 | #endif /*_XT_MARK_H_target */ | ||
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h new file mode 100644 index 000000000000..9a9af79f74d2 --- /dev/null +++ b/include/linux/netfilter/xt_NFQUEUE.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* iptables module for using NFQUEUE mechanism | ||
2 | * | ||
3 | * (C) 2005 Harald Welte <laforge@netfilter.org> | ||
4 | * | ||
5 | * This software is distributed under GNU GPL v2, 1991 | ||
6 | * | ||
7 | */ | ||
8 | #ifndef _XT_NFQ_TARGET_H | ||
9 | #define _XT_NFQ_TARGET_H | ||
10 | |||
11 | /* target info */ | ||
12 | struct xt_NFQ_info { | ||
13 | u_int16_t queuenum; | ||
14 | }; | ||
15 | |||
16 | #endif /* _XT_NFQ_TARGET_H */ | ||
diff --git a/include/linux/netfilter/xt_comment.h b/include/linux/netfilter/xt_comment.h new file mode 100644 index 000000000000..eacfedc6b5d0 --- /dev/null +++ b/include/linux/netfilter/xt_comment.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _XT_COMMENT_H | ||
2 | #define _XT_COMMENT_H | ||
3 | |||
4 | #define XT_MAX_COMMENT_LEN 256 | ||
5 | |||
6 | struct xt_comment_info { | ||
7 | unsigned char comment[XT_MAX_COMMENT_LEN]; | ||
8 | }; | ||
9 | |||
10 | #endif /* XT_COMMENT_H */ | ||
diff --git a/include/linux/netfilter/xt_connbytes.h b/include/linux/netfilter/xt_connbytes.h new file mode 100644 index 000000000000..c022c989754d --- /dev/null +++ b/include/linux/netfilter/xt_connbytes.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _XT_CONNBYTES_H | ||
2 | #define _XT_CONNBYTES_H | ||
3 | |||
4 | enum xt_connbytes_what { | ||
5 | XT_CONNBYTES_PKTS, | ||
6 | XT_CONNBYTES_BYTES, | ||
7 | XT_CONNBYTES_AVGPKT, | ||
8 | }; | ||
9 | |||
10 | enum xt_connbytes_direction { | ||
11 | XT_CONNBYTES_DIR_ORIGINAL, | ||
12 | XT_CONNBYTES_DIR_REPLY, | ||
13 | XT_CONNBYTES_DIR_BOTH, | ||
14 | }; | ||
15 | |||
16 | struct xt_connbytes_info | ||
17 | { | ||
18 | struct { | ||
19 | aligned_u64 from; /* count to be matched */ | ||
20 | aligned_u64 to; /* count to be matched */ | ||
21 | } count; | ||
22 | u_int8_t what; /* ipt_connbytes_what */ | ||
23 | u_int8_t direction; /* ipt_connbytes_direction */ | ||
24 | }; | ||
25 | #endif | ||
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h new file mode 100644 index 000000000000..c592f6ae0883 --- /dev/null +++ b/include/linux/netfilter/xt_connmark.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _XT_CONNMARK_H | ||
2 | #define _XT_CONNMARK_H | ||
3 | |||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | struct xt_connmark_info { | ||
14 | unsigned long mark, mask; | ||
15 | u_int8_t invert; | ||
16 | }; | ||
17 | |||
18 | #endif /*_XT_CONNMARK_H*/ | ||
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h new file mode 100644 index 000000000000..34f63cf2e293 --- /dev/null +++ b/include/linux/netfilter/xt_conntrack.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* Header file for kernel module to match connection tracking information. | ||
2 | * GPL (C) 2001 Marc Boucher (marc@mbsi.ca). | ||
3 | */ | ||
4 | |||
5 | #ifndef _XT_CONNTRACK_H | ||
6 | #define _XT_CONNTRACK_H | ||
7 | |||
8 | #include <linux/netfilter/nf_conntrack_tuple_common.h> | ||
9 | #include <linux/in.h> | ||
10 | |||
11 | #define XT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | ||
12 | #define XT_CONNTRACK_STATE_INVALID (1 << 0) | ||
13 | |||
14 | #define XT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1)) | ||
15 | #define XT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2)) | ||
16 | #define XT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3)) | ||
17 | |||
18 | /* flags, invflags: */ | ||
19 | #define XT_CONNTRACK_STATE 0x01 | ||
20 | #define XT_CONNTRACK_PROTO 0x02 | ||
21 | #define XT_CONNTRACK_ORIGSRC 0x04 | ||
22 | #define XT_CONNTRACK_ORIGDST 0x08 | ||
23 | #define XT_CONNTRACK_REPLSRC 0x10 | ||
24 | #define XT_CONNTRACK_REPLDST 0x20 | ||
25 | #define XT_CONNTRACK_STATUS 0x40 | ||
26 | #define XT_CONNTRACK_EXPIRES 0x80 | ||
27 | |||
28 | /* This is exposed to userspace, so remains frozen in time. */ | ||
29 | struct ip_conntrack_old_tuple | ||
30 | { | ||
31 | struct { | ||
32 | __u32 ip; | ||
33 | union { | ||
34 | __u16 all; | ||
35 | } u; | ||
36 | } src; | ||
37 | |||
38 | struct { | ||
39 | __u32 ip; | ||
40 | union { | ||
41 | __u16 all; | ||
42 | } u; | ||
43 | |||
44 | /* The protocol. */ | ||
45 | u16 protonum; | ||
46 | } dst; | ||
47 | }; | ||
48 | |||
49 | struct xt_conntrack_info | ||
50 | { | ||
51 | unsigned int statemask, statusmask; | ||
52 | |||
53 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | ||
54 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | ||
55 | |||
56 | unsigned long expires_min, expires_max; | ||
57 | |||
58 | /* Flags word */ | ||
59 | u_int8_t flags; | ||
60 | /* Inverse flags */ | ||
61 | u_int8_t invflags; | ||
62 | }; | ||
63 | #endif /*_XT_CONNTRACK_H*/ | ||
diff --git a/include/linux/netfilter/xt_dccp.h b/include/linux/netfilter/xt_dccp.h new file mode 100644 index 000000000000..e0221b9d32cb --- /dev/null +++ b/include/linux/netfilter/xt_dccp.h | |||
@@ -0,0 +1,23 @@ | |||
1 | #ifndef _XT_DCCP_H_ | ||
2 | #define _XT_DCCP_H_ | ||
3 | |||
4 | #define XT_DCCP_SRC_PORTS 0x01 | ||
5 | #define XT_DCCP_DEST_PORTS 0x02 | ||
6 | #define XT_DCCP_TYPE 0x04 | ||
7 | #define XT_DCCP_OPTION 0x08 | ||
8 | |||
9 | #define XT_DCCP_VALID_FLAGS 0x0f | ||
10 | |||
11 | struct xt_dccp_info { | ||
12 | u_int16_t dpts[2]; /* Min, Max */ | ||
13 | u_int16_t spts[2]; /* Min, Max */ | ||
14 | |||
15 | u_int16_t flags; | ||
16 | u_int16_t invflags; | ||
17 | |||
18 | u_int16_t typemask; | ||
19 | u_int8_t option; | ||
20 | }; | ||
21 | |||
22 | #endif /* _XT_DCCP_H_ */ | ||
23 | |||
diff --git a/include/linux/netfilter/xt_helper.h b/include/linux/netfilter/xt_helper.h new file mode 100644 index 000000000000..6b42763f999d --- /dev/null +++ b/include/linux/netfilter/xt_helper.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_HELPER_H | ||
2 | #define _XT_HELPER_H | ||
3 | |||
4 | struct xt_helper_info { | ||
5 | int invert; | ||
6 | char name[30]; | ||
7 | }; | ||
8 | #endif /* _XT_HELPER_H */ | ||
diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h new file mode 100644 index 000000000000..7c2b439f73fe --- /dev/null +++ b/include/linux/netfilter/xt_length.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _XT_LENGTH_H | ||
2 | #define _XT_LENGTH_H | ||
3 | |||
4 | struct xt_length_info { | ||
5 | u_int16_t min, max; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #endif /*_XT_LENGTH_H*/ | ||
diff --git a/include/linux/netfilter/xt_limit.h b/include/linux/netfilter/xt_limit.h new file mode 100644 index 000000000000..b3ce65375ecb --- /dev/null +++ b/include/linux/netfilter/xt_limit.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef _XT_RATE_H | ||
2 | #define _XT_RATE_H | ||
3 | |||
4 | /* timings are in milliseconds. */ | ||
5 | #define XT_LIMIT_SCALE 10000 | ||
6 | |||
7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | ||
8 | seconds, or one every 59 hours. */ | ||
9 | struct xt_rateinfo { | ||
10 | u_int32_t avg; /* Average secs between packets * scale */ | ||
11 | u_int32_t burst; /* Period multiplier for upper limit. */ | ||
12 | |||
13 | /* Used internally by the kernel */ | ||
14 | unsigned long prev; | ||
15 | u_int32_t credit; | ||
16 | u_int32_t credit_cap, cost; | ||
17 | |||
18 | /* Ugly, ugly fucker. */ | ||
19 | struct xt_rateinfo *master; | ||
20 | }; | ||
21 | #endif /*_XT_RATE_H*/ | ||
diff --git a/include/linux/netfilter/xt_mac.h b/include/linux/netfilter/xt_mac.h new file mode 100644 index 000000000000..b892cdc67e06 --- /dev/null +++ b/include/linux/netfilter/xt_mac.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_MAC_H | ||
2 | #define _XT_MAC_H | ||
3 | |||
4 | struct xt_mac_info { | ||
5 | unsigned char srcaddr[ETH_ALEN]; | ||
6 | int invert; | ||
7 | }; | ||
8 | #endif /*_XT_MAC_H*/ | ||
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h new file mode 100644 index 000000000000..802dd4842caf --- /dev/null +++ b/include/linux/netfilter/xt_mark.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _XT_MARK_H | ||
2 | #define _XT_MARK_H | ||
3 | |||
4 | struct xt_mark_info { | ||
5 | unsigned long mark, mask; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #endif /*_XT_MARK_H*/ | ||
diff --git a/include/linux/netfilter/xt_physdev.h b/include/linux/netfilter/xt_physdev.h new file mode 100644 index 000000000000..25a7a1815b5b --- /dev/null +++ b/include/linux/netfilter/xt_physdev.h | |||
@@ -0,0 +1,24 @@ | |||
1 | #ifndef _XT_PHYSDEV_H | ||
2 | #define _XT_PHYSDEV_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | #include <linux/if.h> | ||
6 | #endif | ||
7 | |||
8 | #define XT_PHYSDEV_OP_IN 0x01 | ||
9 | #define XT_PHYSDEV_OP_OUT 0x02 | ||
10 | #define XT_PHYSDEV_OP_BRIDGED 0x04 | ||
11 | #define XT_PHYSDEV_OP_ISIN 0x08 | ||
12 | #define XT_PHYSDEV_OP_ISOUT 0x10 | ||
13 | #define XT_PHYSDEV_OP_MASK (0x20 - 1) | ||
14 | |||
15 | struct xt_physdev_info { | ||
16 | char physindev[IFNAMSIZ]; | ||
17 | char in_mask[IFNAMSIZ]; | ||
18 | char physoutdev[IFNAMSIZ]; | ||
19 | char out_mask[IFNAMSIZ]; | ||
20 | u_int8_t invert; | ||
21 | u_int8_t bitmask; | ||
22 | }; | ||
23 | |||
24 | #endif /*_XT_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter/xt_pkttype.h b/include/linux/netfilter/xt_pkttype.h new file mode 100644 index 000000000000..f265cf52faea --- /dev/null +++ b/include/linux/netfilter/xt_pkttype.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef _XT_PKTTYPE_H | ||
2 | #define _XT_PKTTYPE_H | ||
3 | |||
4 | struct xt_pkttype_info { | ||
5 | int pkttype; | ||
6 | int invert; | ||
7 | }; | ||
8 | #endif /*_XT_PKTTYPE_H*/ | ||
diff --git a/include/linux/netfilter/xt_realm.h b/include/linux/netfilter/xt_realm.h new file mode 100644 index 000000000000..220e87245716 --- /dev/null +++ b/include/linux/netfilter/xt_realm.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #ifndef _XT_REALM_H | ||
2 | #define _XT_REALM_H | ||
3 | |||
4 | struct xt_realm_info { | ||
5 | u_int32_t id; | ||
6 | u_int32_t mask; | ||
7 | u_int8_t invert; | ||
8 | }; | ||
9 | |||
10 | #endif /* _XT_REALM_H */ | ||
diff --git a/include/linux/netfilter/xt_sctp.h b/include/linux/netfilter/xt_sctp.h new file mode 100644 index 000000000000..b157897e7792 --- /dev/null +++ b/include/linux/netfilter/xt_sctp.h | |||
@@ -0,0 +1,107 @@ | |||
1 | #ifndef _XT_SCTP_H_ | ||
2 | #define _XT_SCTP_H_ | ||
3 | |||
4 | #define XT_SCTP_SRC_PORTS 0x01 | ||
5 | #define XT_SCTP_DEST_PORTS 0x02 | ||
6 | #define XT_SCTP_CHUNK_TYPES 0x04 | ||
7 | |||
8 | #define XT_SCTP_VALID_FLAGS 0x07 | ||
9 | |||
10 | #define ELEMCOUNT(x) (sizeof(x)/sizeof(x[0])) | ||
11 | |||
12 | |||
13 | struct xt_sctp_flag_info { | ||
14 | u_int8_t chunktype; | ||
15 | u_int8_t flag; | ||
16 | u_int8_t flag_mask; | ||
17 | }; | ||
18 | |||
19 | #define XT_NUM_SCTP_FLAGS 4 | ||
20 | |||
21 | struct xt_sctp_info { | ||
22 | u_int16_t dpts[2]; /* Min, Max */ | ||
23 | u_int16_t spts[2]; /* Min, Max */ | ||
24 | |||
25 | u_int32_t chunkmap[256 / sizeof (u_int32_t)]; /* Bit mask of chunks to be matched according to RFC 2960 */ | ||
26 | |||
27 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ | ||
28 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ | ||
29 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ | ||
30 | |||
31 | u_int32_t chunk_match_type; | ||
32 | struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS]; | ||
33 | int flag_count; | ||
34 | |||
35 | u_int32_t flags; | ||
36 | u_int32_t invflags; | ||
37 | }; | ||
38 | |||
39 | #define bytes(type) (sizeof(type) * 8) | ||
40 | |||
41 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ | ||
42 | do { \ | ||
43 | chunkmap[type / bytes(u_int32_t)] |= \ | ||
44 | 1 << (type % bytes(u_int32_t)); \ | ||
45 | } while (0) | ||
46 | |||
47 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ | ||
48 | do { \ | ||
49 | chunkmap[type / bytes(u_int32_t)] &= \ | ||
50 | ~(1 << (type % bytes(u_int32_t))); \ | ||
51 | } while (0) | ||
52 | |||
53 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ | ||
54 | ({ \ | ||
55 | (chunkmap[type / bytes (u_int32_t)] & \ | ||
56 | (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ | ||
57 | }) | ||
58 | |||
59 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ | ||
60 | do { \ | ||
61 | int i; \ | ||
62 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ | ||
63 | chunkmap[i] = 0; \ | ||
64 | } while (0) | ||
65 | |||
66 | #define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ | ||
67 | do { \ | ||
68 | int i; \ | ||
69 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ | ||
70 | chunkmap[i] = ~0; \ | ||
71 | } while (0) | ||
72 | |||
73 | #define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ | ||
74 | do { \ | ||
75 | int i; \ | ||
76 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) \ | ||
77 | destmap[i] = srcmap[i]; \ | ||
78 | } while (0) | ||
79 | |||
80 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ | ||
81 | ({ \ | ||
82 | int i; \ | ||
83 | int flag = 1; \ | ||
84 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \ | ||
85 | if (chunkmap[i]) { \ | ||
86 | flag = 0; \ | ||
87 | break; \ | ||
88 | } \ | ||
89 | } \ | ||
90 | flag; \ | ||
91 | }) | ||
92 | |||
93 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ | ||
94 | ({ \ | ||
95 | int i; \ | ||
96 | int flag = 1; \ | ||
97 | for (i = 0; i < ELEMCOUNT(chunkmap); i++) { \ | ||
98 | if (chunkmap[i] != ~0) { \ | ||
99 | flag = 0; \ | ||
100 | break; \ | ||
101 | } \ | ||
102 | } \ | ||
103 | flag; \ | ||
104 | }) | ||
105 | |||
106 | #endif /* _XT_SCTP_H_ */ | ||
107 | |||
diff --git a/include/linux/netfilter/xt_state.h b/include/linux/netfilter/xt_state.h new file mode 100644 index 000000000000..c06f32edee07 --- /dev/null +++ b/include/linux/netfilter/xt_state.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef _XT_STATE_H | ||
2 | #define _XT_STATE_H | ||
3 | |||
4 | #define XT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | ||
5 | #define XT_STATE_INVALID (1 << 0) | ||
6 | |||
7 | #define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) | ||
8 | |||
9 | struct xt_state_info | ||
10 | { | ||
11 | unsigned int statemask; | ||
12 | }; | ||
13 | #endif /*_XT_STATE_H*/ | ||
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h new file mode 100644 index 000000000000..3b3419f2637d --- /dev/null +++ b/include/linux/netfilter/xt_string.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _XT_STRING_H | ||
2 | #define _XT_STRING_H | ||
3 | |||
4 | #define XT_STRING_MAX_PATTERN_SIZE 128 | ||
5 | #define XT_STRING_MAX_ALGO_NAME_SIZE 16 | ||
6 | |||
7 | struct xt_string_info | ||
8 | { | ||
9 | u_int16_t from_offset; | ||
10 | u_int16_t to_offset; | ||
11 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; | ||
12 | char pattern[XT_STRING_MAX_PATTERN_SIZE]; | ||
13 | u_int8_t patlen; | ||
14 | u_int8_t invert; | ||
15 | struct ts_config __attribute__((aligned(8))) *config; | ||
16 | }; | ||
17 | |||
18 | #endif /*_XT_STRING_H*/ | ||
diff --git a/include/linux/netfilter/xt_tcpmss.h b/include/linux/netfilter/xt_tcpmss.h new file mode 100644 index 000000000000..e03274c4c790 --- /dev/null +++ b/include/linux/netfilter/xt_tcpmss.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef _XT_TCPMSS_MATCH_H | ||
2 | #define _XT_TCPMSS_MATCH_H | ||
3 | |||
4 | struct xt_tcpmss_match_info { | ||
5 | u_int16_t mss_min, mss_max; | ||
6 | u_int8_t invert; | ||
7 | }; | ||
8 | |||
9 | #endif /*_XT_TCPMSS_MATCH_H*/ | ||
diff --git a/include/linux/netfilter/xt_tcpudp.h b/include/linux/netfilter/xt_tcpudp.h new file mode 100644 index 000000000000..78bc65f11adf --- /dev/null +++ b/include/linux/netfilter/xt_tcpudp.h | |||
@@ -0,0 +1,36 @@ | |||
1 | #ifndef _XT_TCPUDP_H | ||
2 | #define _XT_TCPUDP_H | ||
3 | |||
4 | /* TCP matching stuff */ | ||
5 | struct xt_tcp | ||
6 | { | ||
7 | u_int16_t spts[2]; /* Source port range. */ | ||
8 | u_int16_t dpts[2]; /* Destination port range. */ | ||
9 | u_int8_t option; /* TCP Option iff non-zero*/ | ||
10 | u_int8_t flg_mask; /* TCP flags mask byte */ | ||
11 | u_int8_t flg_cmp; /* TCP flags compare byte */ | ||
12 | u_int8_t invflags; /* Inverse flags */ | ||
13 | }; | ||
14 | |||
15 | /* Values for "inv" field in struct ipt_tcp. */ | ||
16 | #define XT_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | ||
17 | #define XT_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | ||
18 | #define XT_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */ | ||
19 | #define XT_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */ | ||
20 | #define XT_TCP_INV_MASK 0x0F /* All possible flags. */ | ||
21 | |||
22 | /* UDP matching stuff */ | ||
23 | struct xt_udp | ||
24 | { | ||
25 | u_int16_t spts[2]; /* Source port range. */ | ||
26 | u_int16_t dpts[2]; /* Destination port range. */ | ||
27 | u_int8_t invflags; /* Inverse flags */ | ||
28 | }; | ||
29 | |||
30 | /* Values for "invflags" field in struct ipt_udp. */ | ||
31 | #define XT_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | ||
32 | #define XT_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | ||
33 | #define XT_UDP_INV_MASK 0x03 /* All possible flags. */ | ||
34 | |||
35 | |||
36 | #endif | ||
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h index e98a870a20be..fd21796e5131 100644 --- a/include/linux/netfilter_arp/arp_tables.h +++ b/include/linux/netfilter_arp/arp_tables.h | |||
@@ -19,8 +19,12 @@ | |||
19 | #include <linux/compiler.h> | 19 | #include <linux/compiler.h> |
20 | #include <linux/netfilter_arp.h> | 20 | #include <linux/netfilter_arp.h> |
21 | 21 | ||
22 | #define ARPT_FUNCTION_MAXNAMELEN 30 | 22 | #include <linux/netfilter/x_tables.h> |
23 | #define ARPT_TABLE_MAXNAMELEN 32 | 23 | |
24 | #define ARPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
25 | #define ARPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN | ||
26 | #define arpt_target xt_target | ||
27 | #define arpt_table xt_table | ||
24 | 28 | ||
25 | #define ARPT_DEV_ADDR_LEN_MAX 16 | 29 | #define ARPT_DEV_ADDR_LEN_MAX 16 |
26 | 30 | ||
@@ -91,11 +95,6 @@ struct arpt_standard_target | |||
91 | int verdict; | 95 | int verdict; |
92 | }; | 96 | }; |
93 | 97 | ||
94 | struct arpt_counters | ||
95 | { | ||
96 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
97 | }; | ||
98 | |||
99 | /* Values for "flag" field in struct arpt_ip (general arp structure). | 98 | /* Values for "flag" field in struct arpt_ip (general arp structure). |
100 | * No flags defined yet. | 99 | * No flags defined yet. |
101 | */ | 100 | */ |
@@ -130,7 +129,7 @@ struct arpt_entry | |||
130 | unsigned int comefrom; | 129 | unsigned int comefrom; |
131 | 130 | ||
132 | /* Packet and byte counters. */ | 131 | /* Packet and byte counters. */ |
133 | struct arpt_counters counters; | 132 | struct xt_counters counters; |
134 | 133 | ||
135 | /* The matches (if any), then the target. */ | 134 | /* The matches (if any), then the target. */ |
136 | unsigned char elems[0]; | 135 | unsigned char elems[0]; |
@@ -141,23 +140,24 @@ struct arpt_entry | |||
141 | * Unlike BSD Linux inherits IP options so you don't have to use a raw | 140 | * Unlike BSD Linux inherits IP options so you don't have to use a raw |
142 | * socket for this. Instead we check rights in the calls. | 141 | * socket for this. Instead we check rights in the calls. |
143 | */ | 142 | */ |
144 | #define ARPT_BASE_CTL 96 /* base for firewall socket options */ | 143 | #define ARPT_CTL_OFFSET 32 |
144 | #define ARPT_BASE_CTL (XT_BASE_CTL+ARPT_CTL_OFFSET) | ||
145 | 145 | ||
146 | #define ARPT_SO_SET_REPLACE (ARPT_BASE_CTL) | 146 | #define ARPT_SO_SET_REPLACE (XT_SO_SET_REPLACE+ARPT_CTL_OFFSET) |
147 | #define ARPT_SO_SET_ADD_COUNTERS (ARPT_BASE_CTL + 1) | 147 | #define ARPT_SO_SET_ADD_COUNTERS (XT_SO_SET_ADD_COUNTERS+ARPT_CTL_OFFSET) |
148 | #define ARPT_SO_SET_MAX ARPT_SO_SET_ADD_COUNTERS | 148 | #define ARPT_SO_SET_MAX (XT_SO_SET_MAX+ARPT_CTL_OFFSET) |
149 | 149 | ||
150 | #define ARPT_SO_GET_INFO (ARPT_BASE_CTL) | 150 | #define ARPT_SO_GET_INFO (XT_SO_GET_INFO+ARPT_CTL_OFFSET) |
151 | #define ARPT_SO_GET_ENTRIES (ARPT_BASE_CTL + 1) | 151 | #define ARPT_SO_GET_ENTRIES (XT_SO_GET_ENTRIES+ARPT_CTL_OFFSET) |
152 | /* #define ARPT_SO_GET_REVISION_MATCH (ARPT_BASE_CTL + 2)*/ | 152 | /* #define ARPT_SO_GET_REVISION_MATCH XT_SO_GET_REVISION_MATCH */ |
153 | #define ARPT_SO_GET_REVISION_TARGET (ARPT_BASE_CTL + 3) | 153 | #define ARPT_SO_GET_REVISION_TARGET (XT_SO_GET_REVISION_TARGET+ARPT_CTL_OFFSET) |
154 | #define ARPT_SO_GET_MAX ARPT_SO_GET_REVISION_TARGET | 154 | #define ARPT_SO_GET_MAX (XT_SO_GET_REVISION_TARGET+ARPT_CTL_OFFSET) |
155 | 155 | ||
156 | /* CONTINUE verdict for targets */ | 156 | /* CONTINUE verdict for targets */ |
157 | #define ARPT_CONTINUE 0xFFFFFFFF | 157 | #define ARPT_CONTINUE XT_CONTINUE |
158 | 158 | ||
159 | /* For standard target */ | 159 | /* For standard target */ |
160 | #define ARPT_RETURN (-NF_REPEAT - 1) | 160 | #define ARPT_RETURN XT_RETURN |
161 | 161 | ||
162 | /* The argument to ARPT_SO_GET_INFO */ | 162 | /* The argument to ARPT_SO_GET_INFO */ |
163 | struct arpt_getinfo | 163 | struct arpt_getinfo |
@@ -208,23 +208,14 @@ struct arpt_replace | |||
208 | /* Number of counters (must be equal to current number of entries). */ | 208 | /* Number of counters (must be equal to current number of entries). */ |
209 | unsigned int num_counters; | 209 | unsigned int num_counters; |
210 | /* The old entries' counters. */ | 210 | /* The old entries' counters. */ |
211 | struct arpt_counters __user *counters; | 211 | struct xt_counters __user *counters; |
212 | 212 | ||
213 | /* The entries (hang off end: not really an array). */ | 213 | /* The entries (hang off end: not really an array). */ |
214 | struct arpt_entry entries[0]; | 214 | struct arpt_entry entries[0]; |
215 | }; | 215 | }; |
216 | 216 | ||
217 | /* The argument to ARPT_SO_ADD_COUNTERS. */ | 217 | /* The argument to ARPT_SO_ADD_COUNTERS. */ |
218 | struct arpt_counters_info | 218 | #define arpt_counters_info xt_counters_info |
219 | { | ||
220 | /* Which table. */ | ||
221 | char name[ARPT_TABLE_MAXNAMELEN]; | ||
222 | |||
223 | unsigned int num_counters; | ||
224 | |||
225 | /* The counters (actually `number' of these). */ | ||
226 | struct arpt_counters counters[0]; | ||
227 | }; | ||
228 | 219 | ||
229 | /* The argument to ARPT_SO_GET_ENTRIES. */ | 220 | /* The argument to ARPT_SO_GET_ENTRIES. */ |
230 | struct arpt_get_entries | 221 | struct arpt_get_entries |
@@ -239,19 +230,10 @@ struct arpt_get_entries | |||
239 | struct arpt_entry entrytable[0]; | 230 | struct arpt_entry entrytable[0]; |
240 | }; | 231 | }; |
241 | 232 | ||
242 | /* The argument to ARPT_SO_GET_REVISION_*. Returns highest revision | ||
243 | * kernel supports, if >= revision. */ | ||
244 | struct arpt_get_revision | ||
245 | { | ||
246 | char name[ARPT_FUNCTION_MAXNAMELEN-1]; | ||
247 | |||
248 | u_int8_t revision; | ||
249 | }; | ||
250 | |||
251 | /* Standard return verdict, or do jump. */ | 233 | /* Standard return verdict, or do jump. */ |
252 | #define ARPT_STANDARD_TARGET "" | 234 | #define ARPT_STANDARD_TARGET XT_STANDARD_TARGET |
253 | /* Error verdict. */ | 235 | /* Error verdict. */ |
254 | #define ARPT_ERROR_TARGET "ERROR" | 236 | #define ARPT_ERROR_TARGET XT_ERROR_TARGET |
255 | 237 | ||
256 | /* Helper functions */ | 238 | /* Helper functions */ |
257 | static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e) | 239 | static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e) |
@@ -281,63 +263,8 @@ static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e | |||
281 | */ | 263 | */ |
282 | #ifdef __KERNEL__ | 264 | #ifdef __KERNEL__ |
283 | 265 | ||
284 | /* Registration hooks for targets. */ | 266 | #define arpt_register_target(tgt) xt_register_target(NF_ARP, tgt) |
285 | struct arpt_target | 267 | #define arpt_unregister_target(tgt) xt_unregister_target(NF_ARP, tgt) |
286 | { | ||
287 | struct list_head list; | ||
288 | |||
289 | const char name[ARPT_FUNCTION_MAXNAMELEN-1]; | ||
290 | |||
291 | u_int8_t revision; | ||
292 | |||
293 | /* Returns verdict. */ | ||
294 | unsigned int (*target)(struct sk_buff **pskb, | ||
295 | unsigned int hooknum, | ||
296 | const struct net_device *in, | ||
297 | const struct net_device *out, | ||
298 | const void *targinfo, | ||
299 | void *userdata); | ||
300 | |||
301 | /* Called when user tries to insert an entry of this type: | ||
302 | hook_mask is a bitmask of hooks from which it can be | ||
303 | called. */ | ||
304 | /* Should return true or false. */ | ||
305 | int (*checkentry)(const char *tablename, | ||
306 | const struct arpt_entry *e, | ||
307 | void *targinfo, | ||
308 | unsigned int targinfosize, | ||
309 | unsigned int hook_mask); | ||
310 | |||
311 | /* Called when entry of this type deleted. */ | ||
312 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
313 | |||
314 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
315 | struct module *me; | ||
316 | }; | ||
317 | |||
318 | extern int arpt_register_target(struct arpt_target *target); | ||
319 | extern void arpt_unregister_target(struct arpt_target *target); | ||
320 | |||
321 | /* Furniture shopping... */ | ||
322 | struct arpt_table | ||
323 | { | ||
324 | struct list_head list; | ||
325 | |||
326 | /* A unique name... */ | ||
327 | char name[ARPT_TABLE_MAXNAMELEN]; | ||
328 | |||
329 | /* What hooks you will enter on */ | ||
330 | unsigned int valid_hooks; | ||
331 | |||
332 | /* Lock for the curtain */ | ||
333 | rwlock_t lock; | ||
334 | |||
335 | /* Man behind the curtain... */ | ||
336 | struct arpt_table_info *private; | ||
337 | |||
338 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
339 | struct module *me; | ||
340 | }; | ||
341 | 268 | ||
342 | extern int arpt_register_table(struct arpt_table *table, | 269 | extern int arpt_register_table(struct arpt_table *table, |
343 | const struct arpt_replace *repl); | 270 | const struct arpt_replace *repl); |
diff --git a/include/linux/netfilter_ipv4/ip_conntrack.h b/include/linux/netfilter_ipv4/ip_conntrack.h index b3432ab59a17..215765f043e6 100644 --- a/include/linux/netfilter_ipv4/ip_conntrack.h +++ b/include/linux/netfilter_ipv4/ip_conntrack.h | |||
@@ -199,9 +199,6 @@ ip_conntrack_put(struct ip_conntrack *ct) | |||
199 | nf_conntrack_put(&ct->ct_general); | 199 | nf_conntrack_put(&ct->ct_general); |
200 | } | 200 | } |
201 | 201 | ||
202 | /* call to create an explicit dependency on ip_conntrack. */ | ||
203 | extern void need_ip_conntrack(void); | ||
204 | |||
205 | extern int invert_tuplepr(struct ip_conntrack_tuple *inverse, | 202 | extern int invert_tuplepr(struct ip_conntrack_tuple *inverse, |
206 | const struct ip_conntrack_tuple *orig); | 203 | const struct ip_conntrack_tuple *orig); |
207 | 204 | ||
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index d19d65cf4530..76ba24b68515 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h | |||
@@ -25,8 +25,14 @@ | |||
25 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
26 | #include <linux/netfilter_ipv4.h> | 26 | #include <linux/netfilter_ipv4.h> |
27 | 27 | ||
28 | #define IPT_FUNCTION_MAXNAMELEN 30 | 28 | #include <linux/netfilter/x_tables.h> |
29 | #define IPT_TABLE_MAXNAMELEN 32 | 29 | |
30 | #define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
31 | #define IPT_TABLE_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
32 | #define ipt_match xt_match | ||
33 | #define ipt_target xt_target | ||
34 | #define ipt_table xt_table | ||
35 | #define ipt_get_revision xt_get_revision | ||
30 | 36 | ||
31 | /* Yes, Virginia, you have to zero the padding. */ | 37 | /* Yes, Virginia, you have to zero the padding. */ |
32 | struct ipt_ip { | 38 | struct ipt_ip { |
@@ -102,10 +108,7 @@ struct ipt_standard_target | |||
102 | int verdict; | 108 | int verdict; |
103 | }; | 109 | }; |
104 | 110 | ||
105 | struct ipt_counters | 111 | #define ipt_counters xt_counters |
106 | { | ||
107 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
108 | }; | ||
109 | 112 | ||
110 | /* Values for "flag" field in struct ipt_ip (general ip structure). */ | 113 | /* Values for "flag" field in struct ipt_ip (general ip structure). */ |
111 | #define IPT_F_FRAG 0x01 /* Set if rule is a fragment rule */ | 114 | #define IPT_F_FRAG 0x01 /* Set if rule is a fragment rule */ |
@@ -119,7 +122,7 @@ struct ipt_counters | |||
119 | #define IPT_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ | 122 | #define IPT_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ |
120 | #define IPT_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ | 123 | #define IPT_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ |
121 | #define IPT_INV_FRAG 0x20 /* Invert the sense of FRAG. */ | 124 | #define IPT_INV_FRAG 0x20 /* Invert the sense of FRAG. */ |
122 | #define IPT_INV_PROTO 0x40 /* Invert the sense of PROTO. */ | 125 | #define IPT_INV_PROTO XT_INV_PROTO |
123 | #define IPT_INV_MASK 0x7F /* All possible flag bits mask. */ | 126 | #define IPT_INV_MASK 0x7F /* All possible flag bits mask. */ |
124 | 127 | ||
125 | /* This structure defines each of the firewall rules. Consists of 3 | 128 | /* This structure defines each of the firewall rules. Consists of 3 |
@@ -141,7 +144,7 @@ struct ipt_entry | |||
141 | unsigned int comefrom; | 144 | unsigned int comefrom; |
142 | 145 | ||
143 | /* Packet and byte counters. */ | 146 | /* Packet and byte counters. */ |
144 | struct ipt_counters counters; | 147 | struct xt_counters counters; |
145 | 148 | ||
146 | /* The matches (if any), then the target. */ | 149 | /* The matches (if any), then the target. */ |
147 | unsigned char elems[0]; | 150 | unsigned char elems[0]; |
@@ -151,54 +154,34 @@ struct ipt_entry | |||
151 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | 154 | * New IP firewall options for [gs]etsockopt at the RAW IP level. |
152 | * Unlike BSD Linux inherits IP options so you don't have to use a raw | 155 | * Unlike BSD Linux inherits IP options so you don't have to use a raw |
153 | * socket for this. Instead we check rights in the calls. */ | 156 | * socket for this. Instead we check rights in the calls. */ |
154 | #define IPT_BASE_CTL 64 /* base for firewall socket options */ | 157 | #define IPT_BASE_CTL XT_BASE_CTL |
155 | 158 | ||
156 | #define IPT_SO_SET_REPLACE (IPT_BASE_CTL) | 159 | #define IPT_SO_SET_REPLACE XT_SO_SET_REPLACE |
157 | #define IPT_SO_SET_ADD_COUNTERS (IPT_BASE_CTL + 1) | 160 | #define IPT_SO_SET_ADD_COUNTERS XT_SO_SET_ADD_COUNTERS |
158 | #define IPT_SO_SET_MAX IPT_SO_SET_ADD_COUNTERS | 161 | #define IPT_SO_SET_MAX XT_SO_SET_MAX |
159 | 162 | ||
160 | #define IPT_SO_GET_INFO (IPT_BASE_CTL) | 163 | #define IPT_SO_GET_INFO XT_SO_GET_INFO |
161 | #define IPT_SO_GET_ENTRIES (IPT_BASE_CTL + 1) | 164 | #define IPT_SO_GET_ENTRIES XT_SO_GET_ENTRIES |
162 | #define IPT_SO_GET_REVISION_MATCH (IPT_BASE_CTL + 2) | 165 | #define IPT_SO_GET_REVISION_MATCH XT_SO_GET_REVISION_MATCH |
163 | #define IPT_SO_GET_REVISION_TARGET (IPT_BASE_CTL + 3) | 166 | #define IPT_SO_GET_REVISION_TARGET XT_SO_GET_REVISION_TARGET |
164 | #define IPT_SO_GET_MAX IPT_SO_GET_REVISION_TARGET | 167 | #define IPT_SO_GET_MAX XT_SO_GET_REVISION_TARGET |
165 | 168 | ||
166 | /* CONTINUE verdict for targets */ | 169 | #define IPT_CONTINUE XT_CONTINUE |
167 | #define IPT_CONTINUE 0xFFFFFFFF | 170 | #define IPT_RETURN XT_RETURN |
168 | 171 | ||
169 | /* For standard target */ | 172 | #include <linux/netfilter/xt_tcpudp.h> |
170 | #define IPT_RETURN (-NF_REPEAT - 1) | 173 | #define ipt_udp xt_udp |
174 | #define ipt_tcp xt_tcp | ||
171 | 175 | ||
172 | /* TCP matching stuff */ | 176 | #define IPT_TCP_INV_SRCPT XT_TCP_INV_SRCPT |
173 | struct ipt_tcp | 177 | #define IPT_TCP_INV_DSTPT XT_TCP_INV_DSTPT |
174 | { | 178 | #define IPT_TCP_INV_FLAGS XT_TCP_INV_FLAGS |
175 | u_int16_t spts[2]; /* Source port range. */ | 179 | #define IPT_TCP_INV_OPTION XT_TCP_INV_OPTION |
176 | u_int16_t dpts[2]; /* Destination port range. */ | 180 | #define IPT_TCP_INV_MASK XT_TCP_INV_MASK |
177 | u_int8_t option; /* TCP Option iff non-zero*/ | ||
178 | u_int8_t flg_mask; /* TCP flags mask byte */ | ||
179 | u_int8_t flg_cmp; /* TCP flags compare byte */ | ||
180 | u_int8_t invflags; /* Inverse flags */ | ||
181 | }; | ||
182 | |||
183 | /* Values for "inv" field in struct ipt_tcp. */ | ||
184 | #define IPT_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | ||
185 | #define IPT_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | ||
186 | #define IPT_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */ | ||
187 | #define IPT_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */ | ||
188 | #define IPT_TCP_INV_MASK 0x0F /* All possible flags. */ | ||
189 | |||
190 | /* UDP matching stuff */ | ||
191 | struct ipt_udp | ||
192 | { | ||
193 | u_int16_t spts[2]; /* Source port range. */ | ||
194 | u_int16_t dpts[2]; /* Destination port range. */ | ||
195 | u_int8_t invflags; /* Inverse flags */ | ||
196 | }; | ||
197 | 181 | ||
198 | /* Values for "invflags" field in struct ipt_udp. */ | 182 | #define IPT_UDP_INV_SRCPT XT_UDP_INV_SRCPT |
199 | #define IPT_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | 183 | #define IPT_UDP_INV_DSTPT XT_UDP_INV_DSTPT |
200 | #define IPT_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | 184 | #define IPT_UDP_INV_MASK XT_UDP_INV_MASK |
201 | #define IPT_UDP_INV_MASK 0x03 /* All possible flags. */ | ||
202 | 185 | ||
203 | /* ICMP matching stuff */ | 186 | /* ICMP matching stuff */ |
204 | struct ipt_icmp | 187 | struct ipt_icmp |
@@ -260,23 +243,14 @@ struct ipt_replace | |||
260 | /* Number of counters (must be equal to current number of entries). */ | 243 | /* Number of counters (must be equal to current number of entries). */ |
261 | unsigned int num_counters; | 244 | unsigned int num_counters; |
262 | /* The old entries' counters. */ | 245 | /* The old entries' counters. */ |
263 | struct ipt_counters __user *counters; | 246 | struct xt_counters __user *counters; |
264 | 247 | ||
265 | /* The entries (hang off end: not really an array). */ | 248 | /* The entries (hang off end: not really an array). */ |
266 | struct ipt_entry entries[0]; | 249 | struct ipt_entry entries[0]; |
267 | }; | 250 | }; |
268 | 251 | ||
269 | /* The argument to IPT_SO_ADD_COUNTERS. */ | 252 | /* The argument to IPT_SO_ADD_COUNTERS. */ |
270 | struct ipt_counters_info | 253 | #define ipt_counters_info xt_counters_info |
271 | { | ||
272 | /* Which table. */ | ||
273 | char name[IPT_TABLE_MAXNAMELEN]; | ||
274 | |||
275 | unsigned int num_counters; | ||
276 | |||
277 | /* The counters (actually `number' of these). */ | ||
278 | struct ipt_counters counters[0]; | ||
279 | }; | ||
280 | 254 | ||
281 | /* The argument to IPT_SO_GET_ENTRIES. */ | 255 | /* The argument to IPT_SO_GET_ENTRIES. */ |
282 | struct ipt_get_entries | 256 | struct ipt_get_entries |
@@ -291,19 +265,10 @@ struct ipt_get_entries | |||
291 | struct ipt_entry entrytable[0]; | 265 | struct ipt_entry entrytable[0]; |
292 | }; | 266 | }; |
293 | 267 | ||
294 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision | ||
295 | * kernel supports, if >= revision. */ | ||
296 | struct ipt_get_revision | ||
297 | { | ||
298 | char name[IPT_FUNCTION_MAXNAMELEN-1]; | ||
299 | |||
300 | u_int8_t revision; | ||
301 | }; | ||
302 | |||
303 | /* Standard return verdict, or do jump. */ | 268 | /* Standard return verdict, or do jump. */ |
304 | #define IPT_STANDARD_TARGET "" | 269 | #define IPT_STANDARD_TARGET XT_STANDARD_TARGET |
305 | /* Error verdict. */ | 270 | /* Error verdict. */ |
306 | #define IPT_ERROR_TARGET "ERROR" | 271 | #define IPT_ERROR_TARGET XT_ERROR_TARGET |
307 | 272 | ||
308 | /* Helper functions */ | 273 | /* Helper functions */ |
309 | static __inline__ struct ipt_entry_target * | 274 | static __inline__ struct ipt_entry_target * |
@@ -356,103 +321,18 @@ ipt_get_target(struct ipt_entry *e) | |||
356 | #include <linux/init.h> | 321 | #include <linux/init.h> |
357 | extern void ipt_init(void) __init; | 322 | extern void ipt_init(void) __init; |
358 | 323 | ||
359 | struct ipt_match | 324 | #define ipt_register_target(tgt) xt_register_target(AF_INET, tgt) |
360 | { | 325 | #define ipt_unregister_target(tgt) xt_unregister_target(AF_INET, tgt) |
361 | struct list_head list; | ||
362 | |||
363 | const char name[IPT_FUNCTION_MAXNAMELEN-1]; | ||
364 | |||
365 | u_int8_t revision; | ||
366 | |||
367 | /* Return true or false: return FALSE and set *hotdrop = 1 to | ||
368 | force immediate packet drop. */ | ||
369 | /* Arguments changed since 2.4, as this must now handle | ||
370 | non-linear skbs, using skb_copy_bits and | ||
371 | skb_ip_make_writable. */ | ||
372 | int (*match)(const struct sk_buff *skb, | ||
373 | const struct net_device *in, | ||
374 | const struct net_device *out, | ||
375 | const void *matchinfo, | ||
376 | int offset, | ||
377 | int *hotdrop); | ||
378 | |||
379 | /* Called when user tries to insert an entry of this type. */ | ||
380 | /* Should return true or false. */ | ||
381 | int (*checkentry)(const char *tablename, | ||
382 | const struct ipt_ip *ip, | ||
383 | void *matchinfo, | ||
384 | unsigned int matchinfosize, | ||
385 | unsigned int hook_mask); | ||
386 | |||
387 | /* Called when entry of this type deleted. */ | ||
388 | void (*destroy)(void *matchinfo, unsigned int matchinfosize); | ||
389 | |||
390 | /* Set this to THIS_MODULE. */ | ||
391 | struct module *me; | ||
392 | }; | ||
393 | |||
394 | /* Registration hooks for targets. */ | ||
395 | struct ipt_target | ||
396 | { | ||
397 | struct list_head list; | ||
398 | |||
399 | const char name[IPT_FUNCTION_MAXNAMELEN-1]; | ||
400 | |||
401 | u_int8_t revision; | ||
402 | |||
403 | /* Called when user tries to insert an entry of this type: | ||
404 | hook_mask is a bitmask of hooks from which it can be | ||
405 | called. */ | ||
406 | /* Should return true or false. */ | ||
407 | int (*checkentry)(const char *tablename, | ||
408 | const struct ipt_entry *e, | ||
409 | void *targinfo, | ||
410 | unsigned int targinfosize, | ||
411 | unsigned int hook_mask); | ||
412 | |||
413 | /* Called when entry of this type deleted. */ | ||
414 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
415 | |||
416 | /* Returns verdict. Argument order changed since 2.4, as this | ||
417 | must now handle non-linear skbs, using skb_copy_bits and | ||
418 | skb_ip_make_writable. */ | ||
419 | unsigned int (*target)(struct sk_buff **pskb, | ||
420 | const struct net_device *in, | ||
421 | const struct net_device *out, | ||
422 | unsigned int hooknum, | ||
423 | const void *targinfo, | ||
424 | void *userdata); | ||
425 | |||
426 | /* Set this to THIS_MODULE. */ | ||
427 | struct module *me; | ||
428 | }; | ||
429 | 326 | ||
430 | extern int ipt_register_target(struct ipt_target *target); | 327 | #define ipt_register_match(mtch) xt_register_match(AF_INET, mtch) |
431 | extern void ipt_unregister_target(struct ipt_target *target); | 328 | #define ipt_unregister_match(mtch) xt_unregister_match(AF_INET, mtch) |
432 | 329 | ||
433 | extern int ipt_register_match(struct ipt_match *match); | 330 | //#define ipt_register_table(tbl, repl) xt_register_table(AF_INET, tbl, repl) |
434 | extern void ipt_unregister_match(struct ipt_match *match); | 331 | //#define ipt_unregister_table(tbl) xt_unregister_table(AF_INET, tbl) |
435 | 332 | ||
436 | /* Furniture shopping... */ | 333 | extern int ipt_register_table(struct ipt_table *table, |
437 | struct ipt_table | 334 | const struct ipt_replace *repl); |
438 | { | 335 | extern void ipt_unregister_table(struct ipt_table *table); |
439 | struct list_head list; | ||
440 | |||
441 | /* A unique name... */ | ||
442 | char name[IPT_TABLE_MAXNAMELEN]; | ||
443 | |||
444 | /* What hooks you will enter on */ | ||
445 | unsigned int valid_hooks; | ||
446 | |||
447 | /* Lock for the curtain */ | ||
448 | rwlock_t lock; | ||
449 | |||
450 | /* Man behind the curtain... */ | ||
451 | struct ipt_table_info *private; | ||
452 | |||
453 | /* Set to THIS_MODULE. */ | ||
454 | struct module *me; | ||
455 | }; | ||
456 | 336 | ||
457 | /* net/sched/ipt.c: Gimme access to your targets! Gets target->me. */ | 337 | /* net/sched/ipt.c: Gimme access to your targets! Gets target->me. */ |
458 | extern struct ipt_target *ipt_find_target(const char *name, u8 revision); | 338 | extern struct ipt_target *ipt_find_target(const char *name, u8 revision); |
@@ -476,9 +356,6 @@ struct ipt_error | |||
476 | struct ipt_error_target target; | 356 | struct ipt_error_target target; |
477 | }; | 357 | }; |
478 | 358 | ||
479 | extern int ipt_register_table(struct ipt_table *table, | ||
480 | const struct ipt_replace *repl); | ||
481 | extern void ipt_unregister_table(struct ipt_table *table); | ||
482 | extern unsigned int ipt_do_table(struct sk_buff **pskb, | 359 | extern unsigned int ipt_do_table(struct sk_buff **pskb, |
483 | unsigned int hook, | 360 | unsigned int hook, |
484 | const struct net_device *in, | 361 | const struct net_device *in, |
@@ -486,6 +363,6 @@ extern unsigned int ipt_do_table(struct sk_buff **pskb, | |||
486 | struct ipt_table *table, | 363 | struct ipt_table *table, |
487 | void *userdata); | 364 | void *userdata); |
488 | 365 | ||
489 | #define IPT_ALIGN(s) (((s) + (__alignof__(struct ipt_entry)-1)) & ~(__alignof__(struct ipt_entry)-1)) | 366 | #define IPT_ALIGN(s) XT_ALIGN(s) |
490 | #endif /*__KERNEL__*/ | 367 | #endif /*__KERNEL__*/ |
491 | #endif /* _IPTABLES_H */ | 368 | #endif /* _IPTABLES_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h index 7596e3dd00ca..a46d511b5c36 100644 --- a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h +++ b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_CLASSIFY_H | 1 | #ifndef _IPT_CLASSIFY_H |
2 | #define _IPT_CLASSIFY_H | 2 | #define _IPT_CLASSIFY_H |
3 | 3 | ||
4 | struct ipt_classify_target_info { | 4 | #include <linux/netfilter/xt_CLASSIFY.h> |
5 | u_int32_t priority; | 5 | #define ipt_classify_target_info xt_classify_target_info |
6 | }; | ||
7 | 6 | ||
8 | #endif /*_IPT_CLASSIFY_H */ | 7 | #endif /*_IPT_CLASSIFY_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_CONNMARK.h b/include/linux/netfilter_ipv4/ipt_CONNMARK.h index d3c02536fc4c..9ecfee0a9e33 100644 --- a/include/linux/netfilter_ipv4/ipt_CONNMARK.h +++ b/include/linux/netfilter_ipv4/ipt_CONNMARK.h | |||
@@ -9,17 +9,11 @@ | |||
9 | * the Free Software Foundation; either version 2 of the License, or | 9 | * the Free Software Foundation; either version 2 of the License, or |
10 | * (at your option) any later version. | 10 | * (at your option) any later version. |
11 | */ | 11 | */ |
12 | #include <linux/netfilter/xt_CONNMARK.h> | ||
13 | #define IPT_CONNMARK_SET XT_CONNMARK_SET | ||
14 | #define IPT_CONNMARK_SAVE XT_CONNMARK_SAVE | ||
15 | #define IPT_CONNMARK_RESTORE XT_CONNMARK_RESTORE | ||
12 | 16 | ||
13 | enum { | 17 | #define ipt_connmark_target_info xt_connmark_target_info |
14 | IPT_CONNMARK_SET = 0, | ||
15 | IPT_CONNMARK_SAVE, | ||
16 | IPT_CONNMARK_RESTORE | ||
17 | }; | ||
18 | |||
19 | struct ipt_connmark_target_info { | ||
20 | unsigned long mark; | ||
21 | unsigned long mask; | ||
22 | u_int8_t mode; | ||
23 | }; | ||
24 | 18 | ||
25 | #endif /*_IPT_CONNMARK_H_target*/ | 19 | #endif /*_IPT_CONNMARK_H_target*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_MARK.h b/include/linux/netfilter_ipv4/ipt_MARK.h index f47485790ed4..697a486a96d3 100644 --- a/include/linux/netfilter_ipv4/ipt_MARK.h +++ b/include/linux/netfilter_ipv4/ipt_MARK.h | |||
@@ -1,20 +1,18 @@ | |||
1 | #ifndef _IPT_MARK_H_target | 1 | #ifndef _IPT_MARK_H_target |
2 | #define _IPT_MARK_H_target | 2 | #define _IPT_MARK_H_target |
3 | 3 | ||
4 | /* Backwards compatibility for old userspace */ | ||
5 | |||
6 | #include <linux/netfilter/xt_MARK.h> | ||
7 | |||
4 | /* Version 0 */ | 8 | /* Version 0 */ |
5 | struct ipt_mark_target_info { | 9 | #define ipt_mark_target_info xt_mark_target_info |
6 | unsigned long mark; | ||
7 | }; | ||
8 | 10 | ||
9 | /* Version 1 */ | 11 | /* Version 1 */ |
10 | enum { | 12 | #define IPT_MARK_SET XT_MARK_SET |
11 | IPT_MARK_SET=0, | 13 | #define IPT_MARK_AND XT_MARK_AND |
12 | IPT_MARK_AND, | 14 | #define IPT_MARK_OR XT_MARK_OR |
13 | IPT_MARK_OR | 15 | |
14 | }; | 16 | #define ipt_mark_target_info_v1 xt_mark_target_info_v1 |
15 | 17 | ||
16 | struct ipt_mark_target_info_v1 { | ||
17 | unsigned long mark; | ||
18 | u_int8_t mode; | ||
19 | }; | ||
20 | #endif /*_IPT_MARK_H_target*/ | 18 | #endif /*_IPT_MARK_H_target*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h index b5b2943b0c66..97a2a7557cb9 100644 --- a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h +++ b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h | |||
@@ -8,9 +8,9 @@ | |||
8 | #ifndef _IPT_NFQ_TARGET_H | 8 | #ifndef _IPT_NFQ_TARGET_H |
9 | #define _IPT_NFQ_TARGET_H | 9 | #define _IPT_NFQ_TARGET_H |
10 | 10 | ||
11 | /* target info */ | 11 | /* Backwards compatibility for old userspace */ |
12 | struct ipt_NFQ_info { | 12 | #include <linux/netfilter/xt_NFQUEUE.h> |
13 | u_int16_t queuenum; | 13 | |
14 | }; | 14 | #define ipt_NFQ_info xt_NFQ_info |
15 | 15 | ||
16 | #endif /* _IPT_DSCP_TARGET_H */ | 16 | #endif /* _IPT_DSCP_TARGET_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_comment.h b/include/linux/netfilter_ipv4/ipt_comment.h index 85c1123c29ce..ae2afc2f7481 100644 --- a/include/linux/netfilter_ipv4/ipt_comment.h +++ b/include/linux/netfilter_ipv4/ipt_comment.h | |||
@@ -1,10 +1,10 @@ | |||
1 | #ifndef _IPT_COMMENT_H | 1 | #ifndef _IPT_COMMENT_H |
2 | #define _IPT_COMMENT_H | 2 | #define _IPT_COMMENT_H |
3 | 3 | ||
4 | #define IPT_MAX_COMMENT_LEN 256 | 4 | #include <linux/netfilter/xt_comment.h> |
5 | 5 | ||
6 | struct ipt_comment_info { | 6 | #define IPT_MAX_COMMENT_LEN XT_MAX_COMMENT_LEN |
7 | unsigned char comment[IPT_MAX_COMMENT_LEN]; | 7 | |
8 | }; | 8 | #define ipt_comment_info xt_comment_info |
9 | 9 | ||
10 | #endif /* _IPT_COMMENT_H */ | 10 | #endif /* _IPT_COMMENT_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_connbytes.h b/include/linux/netfilter_ipv4/ipt_connbytes.h index 9e5532f8d8ac..b04dfa3083c9 100644 --- a/include/linux/netfilter_ipv4/ipt_connbytes.h +++ b/include/linux/netfilter_ipv4/ipt_connbytes.h | |||
@@ -1,25 +1,18 @@ | |||
1 | #ifndef _IPT_CONNBYTES_H | 1 | #ifndef _IPT_CONNBYTES_H |
2 | #define _IPT_CONNBYTES_H | 2 | #define _IPT_CONNBYTES_H |
3 | 3 | ||
4 | enum ipt_connbytes_what { | 4 | #include <net/netfilter/xt_connbytes.h> |
5 | IPT_CONNBYTES_PKTS, | 5 | #define ipt_connbytes_what xt_connbytes_what |
6 | IPT_CONNBYTES_BYTES, | ||
7 | IPT_CONNBYTES_AVGPKT, | ||
8 | }; | ||
9 | 6 | ||
10 | enum ipt_connbytes_direction { | 7 | #define IPT_CONNBYTES_PKTS XT_CONNBYTES_PACKETS |
11 | IPT_CONNBYTES_DIR_ORIGINAL, | 8 | #define IPT_CONNBYTES_BYTES XT_CONNBYTES_BYTES |
12 | IPT_CONNBYTES_DIR_REPLY, | 9 | #define IPT_CONNBYTES_AVGPKT XT_CONNBYTES_AVGPKT |
13 | IPT_CONNBYTES_DIR_BOTH, | 10 | |
14 | }; | 11 | #define ipt_connbytes_direction xt_connbytes_direction |
12 | #define IPT_CONNBYTES_DIR_ORIGINAL XT_CONNBYTES_DIR_ORIGINAL | ||
13 | #define IPT_CONNBYTES_DIR_REPLY XT_CONNBYTES_DIR_REPLY | ||
14 | #define IPT_CONNBYTES_DIR_BOTH XT_CONNBYTES_DIR_BOTH | ||
15 | |||
16 | #define ipt_connbytes_info xt_connbytes_info | ||
15 | 17 | ||
16 | struct ipt_connbytes_info | ||
17 | { | ||
18 | struct { | ||
19 | aligned_u64 from; /* count to be matched */ | ||
20 | aligned_u64 to; /* count to be matched */ | ||
21 | } count; | ||
22 | u_int8_t what; /* ipt_connbytes_what */ | ||
23 | u_int8_t direction; /* ipt_connbytes_direction */ | ||
24 | }; | ||
25 | #endif | 18 | #endif |
diff --git a/include/linux/netfilter_ipv4/ipt_connmark.h b/include/linux/netfilter_ipv4/ipt_connmark.h index 46573270d9aa..c7ba6560d44c 100644 --- a/include/linux/netfilter_ipv4/ipt_connmark.h +++ b/include/linux/netfilter_ipv4/ipt_connmark.h | |||
@@ -1,18 +1,7 @@ | |||
1 | #ifndef _IPT_CONNMARK_H | 1 | #ifndef _IPT_CONNMARK_H |
2 | #define _IPT_CONNMARK_H | 2 | #define _IPT_CONNMARK_H |
3 | 3 | ||
4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | 4 | #include <linux/netfilter/xt_connmark.h> |
5 | * by Henrik Nordstrom <hno@marasystems.com> | 5 | #define ipt_connmark_info xt_connmark_info |
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | struct ipt_connmark_info { | ||
14 | unsigned long mark, mask; | ||
15 | u_int8_t invert; | ||
16 | }; | ||
17 | 6 | ||
18 | #endif /*_IPT_CONNMARK_H*/ | 7 | #endif /*_IPT_CONNMARK_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_conntrack.h b/include/linux/netfilter_ipv4/ipt_conntrack.h index 413c5658bd3a..cde6762949c5 100644 --- a/include/linux/netfilter_ipv4/ipt_conntrack.h +++ b/include/linux/netfilter_ipv4/ipt_conntrack.h | |||
@@ -5,56 +5,24 @@ | |||
5 | #ifndef _IPT_CONNTRACK_H | 5 | #ifndef _IPT_CONNTRACK_H |
6 | #define _IPT_CONNTRACK_H | 6 | #define _IPT_CONNTRACK_H |
7 | 7 | ||
8 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | 8 | #include <linux/netfilter/xt_conntrack.h> |
9 | #define IPT_CONNTRACK_STATE_INVALID (1 << 0) | ||
10 | 9 | ||
11 | #define IPT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1)) | 10 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) XT_CONNTRACK_STATE_BIT(ctinfo) |
12 | #define IPT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2)) | 11 | #define IPT_CONNTRACK_STATE_INVALID XT_CONNTRACK_STATE_INVALID |
13 | #define IPT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3)) | ||
14 | 12 | ||
15 | /* flags, invflags: */ | 13 | #define IPT_CONNTRACK_STATE_SNAT XT_CONNTRACK_STATE_SNAT |
16 | #define IPT_CONNTRACK_STATE 0x01 | 14 | #define IPT_CONNTRACK_STATE_DNAT XT_CONNTRACK_STATE_DNAT |
17 | #define IPT_CONNTRACK_PROTO 0x02 | 15 | #define IPT_CONNTRACK_STATE_UNTRACKED XT_CONNTRACK_STATE_UNTRACKED |
18 | #define IPT_CONNTRACK_ORIGSRC 0x04 | ||
19 | #define IPT_CONNTRACK_ORIGDST 0x08 | ||
20 | #define IPT_CONNTRACK_REPLSRC 0x10 | ||
21 | #define IPT_CONNTRACK_REPLDST 0x20 | ||
22 | #define IPT_CONNTRACK_STATUS 0x40 | ||
23 | #define IPT_CONNTRACK_EXPIRES 0x80 | ||
24 | |||
25 | /* This is exposed to userspace, so remains frozen in time. */ | ||
26 | struct ip_conntrack_old_tuple | ||
27 | { | ||
28 | struct { | ||
29 | __u32 ip; | ||
30 | union { | ||
31 | __u16 all; | ||
32 | } u; | ||
33 | } src; | ||
34 | |||
35 | struct { | ||
36 | __u32 ip; | ||
37 | union { | ||
38 | __u16 all; | ||
39 | } u; | ||
40 | |||
41 | /* The protocol. */ | ||
42 | u16 protonum; | ||
43 | } dst; | ||
44 | }; | ||
45 | 16 | ||
46 | struct ipt_conntrack_info | 17 | /* flags, invflags: */ |
47 | { | 18 | #define IPT_CONNTRACK_STATE XT_CONNTRACK_STATE |
48 | unsigned int statemask, statusmask; | 19 | #define IPT_CONNTRACK_PROTO XT_CONNTRACK_PROTO |
49 | 20 | #define IPT_CONNTRACK_ORIGSRC XT_CONNTRACK_ORIGSRC | |
50 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | 21 | #define IPT_CONNTRACK_ORIGDST XT_CONNTRACK_ORIGDST |
51 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | 22 | #define IPT_CONNTRACK_REPLSRC XT_CONNTRACK_REPLSRC |
52 | 23 | #define IPT_CONNTRACK_REPLDST XT_CONNTRACK_REPLDST | |
53 | unsigned long expires_min, expires_max; | 24 | #define IPT_CONNTRACK_STATUS XT_CONNTRACK_STATUS |
54 | 25 | #define IPT_CONNTRACK_EXPIRES XT_CONNTRACK_EXPIRES | |
55 | /* Flags word */ | 26 | |
56 | u_int8_t flags; | 27 | #define ipt_conntrack_info xt_conntrack_info |
57 | /* Inverse flags */ | ||
58 | u_int8_t invflags; | ||
59 | }; | ||
60 | #endif /*_IPT_CONNTRACK_H*/ | 28 | #endif /*_IPT_CONNTRACK_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_dccp.h b/include/linux/netfilter_ipv4/ipt_dccp.h index 3cb3a522e62b..e70d11e1f53c 100644 --- a/include/linux/netfilter_ipv4/ipt_dccp.h +++ b/include/linux/netfilter_ipv4/ipt_dccp.h | |||
@@ -1,23 +1,15 @@ | |||
1 | #ifndef _IPT_DCCP_H_ | 1 | #ifndef _IPT_DCCP_H_ |
2 | #define _IPT_DCCP_H_ | 2 | #define _IPT_DCCP_H_ |
3 | 3 | ||
4 | #define IPT_DCCP_SRC_PORTS 0x01 | 4 | #include <linux/netfilter/xt_dccp.h> |
5 | #define IPT_DCCP_DEST_PORTS 0x02 | 5 | #define IPT_DCCP_SRC_PORTS XT_DCCP_SRC_PORTS |
6 | #define IPT_DCCP_TYPE 0x04 | 6 | #define IPT_DCCP_DEST_PORTS XT_DCCP_DEST_PORTS |
7 | #define IPT_DCCP_OPTION 0x08 | 7 | #define IPT_DCCP_TYPE XT_DCCP_TYPE |
8 | #define IPT_DCCP_OPTION XT_DCCP_OPTION | ||
8 | 9 | ||
9 | #define IPT_DCCP_VALID_FLAGS 0x0f | 10 | #define IPT_DCCP_VALID_FLAGS XT_DCCP_VALID_FLAGS |
10 | 11 | ||
11 | struct ipt_dccp_info { | 12 | #define ipt_dccp_info xt_dccp_info |
12 | u_int16_t dpts[2]; /* Min, Max */ | ||
13 | u_int16_t spts[2]; /* Min, Max */ | ||
14 | |||
15 | u_int16_t flags; | ||
16 | u_int16_t invflags; | ||
17 | |||
18 | u_int16_t typemask; | ||
19 | u_int8_t option; | ||
20 | }; | ||
21 | 13 | ||
22 | #endif /* _IPT_DCCP_H_ */ | 14 | #endif /* _IPT_DCCP_H_ */ |
23 | 15 | ||
diff --git a/include/linux/netfilter_ipv4/ipt_helper.h b/include/linux/netfilter_ipv4/ipt_helper.h index 6f12ecb8c93d..80452c218551 100644 --- a/include/linux/netfilter_ipv4/ipt_helper.h +++ b/include/linux/netfilter_ipv4/ipt_helper.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_HELPER_H | 1 | #ifndef _IPT_HELPER_H |
2 | #define _IPT_HELPER_H | 2 | #define _IPT_HELPER_H |
3 | 3 | ||
4 | struct ipt_helper_info { | 4 | #include <linux/netfilter/xt_helper.h> |
5 | int invert; | 5 | #define ipt_helper_info xt_helper_info |
6 | char name[30]; | 6 | |
7 | }; | ||
8 | #endif /* _IPT_HELPER_H */ | 7 | #endif /* _IPT_HELPER_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_length.h b/include/linux/netfilter_ipv4/ipt_length.h index 6e0885229615..9b45206ffcef 100644 --- a/include/linux/netfilter_ipv4/ipt_length.h +++ b/include/linux/netfilter_ipv4/ipt_length.h | |||
@@ -1,9 +1,7 @@ | |||
1 | #ifndef _IPT_LENGTH_H | 1 | #ifndef _IPT_LENGTH_H |
2 | #define _IPT_LENGTH_H | 2 | #define _IPT_LENGTH_H |
3 | 3 | ||
4 | struct ipt_length_info { | 4 | #include <linux/netfilter/xt_length.h> |
5 | u_int16_t min, max; | 5 | #define ipt_length_info xt_length_info |
6 | u_int8_t invert; | ||
7 | }; | ||
8 | 6 | ||
9 | #endif /*_IPT_LENGTH_H*/ | 7 | #endif /*_IPT_LENGTH_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_limit.h b/include/linux/netfilter_ipv4/ipt_limit.h index 256453409e21..92f5cd07bbc4 100644 --- a/include/linux/netfilter_ipv4/ipt_limit.h +++ b/include/linux/netfilter_ipv4/ipt_limit.h | |||
@@ -1,21 +1,8 @@ | |||
1 | #ifndef _IPT_RATE_H | 1 | #ifndef _IPT_RATE_H |
2 | #define _IPT_RATE_H | 2 | #define _IPT_RATE_H |
3 | 3 | ||
4 | /* timings are in milliseconds. */ | 4 | #include <linux/netfilter/xt_limit.h> |
5 | #define IPT_LIMIT_SCALE 10000 | 5 | #define IPT_LIMIT_SCALE XT_LIMIT_SCALE |
6 | #define ipt_rateinfo xt_rateinfo | ||
6 | 7 | ||
7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | ||
8 | seconds, or one every 59 hours. */ | ||
9 | struct ipt_rateinfo { | ||
10 | u_int32_t avg; /* Average secs between packets * scale */ | ||
11 | u_int32_t burst; /* Period multiplier for upper limit. */ | ||
12 | |||
13 | /* Used internally by the kernel */ | ||
14 | unsigned long prev; | ||
15 | u_int32_t credit; | ||
16 | u_int32_t credit_cap, cost; | ||
17 | |||
18 | /* Ugly, ugly fucker. */ | ||
19 | struct ipt_rateinfo *master; | ||
20 | }; | ||
21 | #endif /*_IPT_RATE_H*/ | 8 | #endif /*_IPT_RATE_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_mac.h b/include/linux/netfilter_ipv4/ipt_mac.h index f8d5b8e7ccdb..b186008a3c47 100644 --- a/include/linux/netfilter_ipv4/ipt_mac.h +++ b/include/linux/netfilter_ipv4/ipt_mac.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_MAC_H | 1 | #ifndef _IPT_MAC_H |
2 | #define _IPT_MAC_H | 2 | #define _IPT_MAC_H |
3 | 3 | ||
4 | struct ipt_mac_info { | 4 | #include <linux/netfilter/xt_mac.h> |
5 | unsigned char srcaddr[ETH_ALEN]; | 5 | #define ipt_mac_info xt_mac_info |
6 | int invert; | 6 | |
7 | }; | ||
8 | #endif /*_IPT_MAC_H*/ | 7 | #endif /*_IPT_MAC_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_mark.h b/include/linux/netfilter_ipv4/ipt_mark.h index f3952b563d4c..bfde67c61224 100644 --- a/include/linux/netfilter_ipv4/ipt_mark.h +++ b/include/linux/netfilter_ipv4/ipt_mark.h | |||
@@ -1,9 +1,9 @@ | |||
1 | #ifndef _IPT_MARK_H | 1 | #ifndef _IPT_MARK_H |
2 | #define _IPT_MARK_H | 2 | #define _IPT_MARK_H |
3 | 3 | ||
4 | struct ipt_mark_info { | 4 | /* Backwards compatibility for old userspace */ |
5 | unsigned long mark, mask; | 5 | #include <linux/netfilter/xt_mark.h> |
6 | u_int8_t invert; | 6 | |
7 | }; | 7 | #define ipt_mark_info xt_mark_info |
8 | 8 | ||
9 | #endif /*_IPT_MARK_H*/ | 9 | #endif /*_IPT_MARK_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_physdev.h b/include/linux/netfilter_ipv4/ipt_physdev.h index 7538c8655ec0..2400e7140f26 100644 --- a/include/linux/netfilter_ipv4/ipt_physdev.h +++ b/include/linux/netfilter_ipv4/ipt_physdev.h | |||
@@ -1,24 +1,17 @@ | |||
1 | #ifndef _IPT_PHYSDEV_H | 1 | #ifndef _IPT_PHYSDEV_H |
2 | #define _IPT_PHYSDEV_H | 2 | #define _IPT_PHYSDEV_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | /* Backwards compatibility for old userspace */ |
5 | #include <linux/if.h> | ||
6 | #endif | ||
7 | 5 | ||
8 | #define IPT_PHYSDEV_OP_IN 0x01 | 6 | #include <linux/netfilter/xt_physdev.h> |
9 | #define IPT_PHYSDEV_OP_OUT 0x02 | ||
10 | #define IPT_PHYSDEV_OP_BRIDGED 0x04 | ||
11 | #define IPT_PHYSDEV_OP_ISIN 0x08 | ||
12 | #define IPT_PHYSDEV_OP_ISOUT 0x10 | ||
13 | #define IPT_PHYSDEV_OP_MASK (0x20 - 1) | ||
14 | 7 | ||
15 | struct ipt_physdev_info { | 8 | #define IPT_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN |
16 | char physindev[IFNAMSIZ]; | 9 | #define IPT_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT |
17 | char in_mask[IFNAMSIZ]; | 10 | #define IPT_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED |
18 | char physoutdev[IFNAMSIZ]; | 11 | #define IPT_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN |
19 | char out_mask[IFNAMSIZ]; | 12 | #define IPT_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT |
20 | u_int8_t invert; | 13 | #define IPT_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK |
21 | u_int8_t bitmask; | 14 | |
22 | }; | 15 | #define ipt_physdev_info xt_physdev_info |
23 | 16 | ||
24 | #endif /*_IPT_PHYSDEV_H*/ | 17 | #endif /*_IPT_PHYSDEV_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_pkttype.h b/include/linux/netfilter_ipv4/ipt_pkttype.h index d53a65848683..ff1fbc949a0c 100644 --- a/include/linux/netfilter_ipv4/ipt_pkttype.h +++ b/include/linux/netfilter_ipv4/ipt_pkttype.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IPT_PKTTYPE_H | 1 | #ifndef _IPT_PKTTYPE_H |
2 | #define _IPT_PKTTYPE_H | 2 | #define _IPT_PKTTYPE_H |
3 | 3 | ||
4 | struct ipt_pkttype_info { | 4 | #include <linux/netfilter/xt_pkttype.h> |
5 | int pkttype; | 5 | #define ipt_pkttype_info xt_pkttype_info |
6 | int invert; | 6 | |
7 | }; | ||
8 | #endif /*_IPT_PKTTYPE_H*/ | 7 | #endif /*_IPT_PKTTYPE_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_realm.h b/include/linux/netfilter_ipv4/ipt_realm.h index a4d6698723ac..b3996eaa0188 100644 --- a/include/linux/netfilter_ipv4/ipt_realm.h +++ b/include/linux/netfilter_ipv4/ipt_realm.h | |||
@@ -1,10 +1,7 @@ | |||
1 | #ifndef _IPT_REALM_H | 1 | #ifndef _IPT_REALM_H |
2 | #define _IPT_REALM_H | 2 | #define _IPT_REALM_H |
3 | 3 | ||
4 | struct ipt_realm_info { | 4 | #include <linux/netfilter/xt_realm.h> |
5 | u_int32_t id; | 5 | #define ipt_realm_info xt_realm_info |
6 | u_int32_t mask; | ||
7 | u_int8_t invert; | ||
8 | }; | ||
9 | 6 | ||
10 | #endif /* _IPT_REALM_H */ | 7 | #endif /* _IPT_REALM_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_state.h b/include/linux/netfilter_ipv4/ipt_state.h index 5df37868933d..a44a99cc28cc 100644 --- a/include/linux/netfilter_ipv4/ipt_state.h +++ b/include/linux/netfilter_ipv4/ipt_state.h | |||
@@ -1,13 +1,15 @@ | |||
1 | #ifndef _IPT_STATE_H | 1 | #ifndef _IPT_STATE_H |
2 | #define _IPT_STATE_H | 2 | #define _IPT_STATE_H |
3 | 3 | ||
4 | #define IPT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1)) | 4 | /* Backwards compatibility for old userspace */ |
5 | #define IPT_STATE_INVALID (1 << 0) | ||
6 | 5 | ||
7 | #define IPT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) | 6 | #include <linux/netfilter/xt_state.h> |
7 | |||
8 | #define IPT_STATE_BIT XT_STATE_BIT | ||
9 | #define IPT_STATE_INVALID XT_STATE_INVALID | ||
10 | |||
11 | #define IPT_STATE_UNTRACKED XT_STATE_UNTRACKED | ||
12 | |||
13 | #define ipt_state_info xt_state_info | ||
8 | 14 | ||
9 | struct ipt_state_info | ||
10 | { | ||
11 | unsigned int statemask; | ||
12 | }; | ||
13 | #endif /*_IPT_STATE_H*/ | 15 | #endif /*_IPT_STATE_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_string.h b/include/linux/netfilter_ipv4/ipt_string.h index a265f6e44eab..c26de3059903 100644 --- a/include/linux/netfilter_ipv4/ipt_string.h +++ b/include/linux/netfilter_ipv4/ipt_string.h | |||
@@ -1,18 +1,10 @@ | |||
1 | #ifndef _IPT_STRING_H | 1 | #ifndef _IPT_STRING_H |
2 | #define _IPT_STRING_H | 2 | #define _IPT_STRING_H |
3 | 3 | ||
4 | #define IPT_STRING_MAX_PATTERN_SIZE 128 | 4 | #include <linux/netfilter/xt_string.h> |
5 | #define IPT_STRING_MAX_ALGO_NAME_SIZE 16 | ||
6 | 5 | ||
7 | struct ipt_string_info | 6 | #define IPT_STRING_MAX_PATTERN_SIZE XT_STRING_MAX_PATTERN_SIZE |
8 | { | 7 | #define IPT_STRING_MAX_ALGO_NAME_SIZE XT_STRING_MAX_ALGO_NAME_SIZE |
9 | u_int16_t from_offset; | 8 | #define ipt_string_info xt_string_info |
10 | u_int16_t to_offset; | ||
11 | char algo[IPT_STRING_MAX_ALGO_NAME_SIZE]; | ||
12 | char pattern[IPT_STRING_MAX_PATTERN_SIZE]; | ||
13 | u_int8_t patlen; | ||
14 | u_int8_t invert; | ||
15 | struct ts_config __attribute__((aligned(8))) *config; | ||
16 | }; | ||
17 | 9 | ||
18 | #endif /*_IPT_STRING_H*/ | 10 | #endif /*_IPT_STRING_H*/ |
diff --git a/include/linux/netfilter_ipv4/ipt_tcpmss.h b/include/linux/netfilter_ipv4/ipt_tcpmss.h index e2b14397f701..18bbc8e8e009 100644 --- a/include/linux/netfilter_ipv4/ipt_tcpmss.h +++ b/include/linux/netfilter_ipv4/ipt_tcpmss.h | |||
@@ -1,9 +1,7 @@ | |||
1 | #ifndef _IPT_TCPMSS_MATCH_H | 1 | #ifndef _IPT_TCPMSS_MATCH_H |
2 | #define _IPT_TCPMSS_MATCH_H | 2 | #define _IPT_TCPMSS_MATCH_H |
3 | 3 | ||
4 | struct ipt_tcpmss_match_info { | 4 | #include <linux/netfilter/xt_tcpmss.h> |
5 | u_int16_t mss_min, mss_max; | 5 | #define ipt_tcpmss_match_info xt_tcpmss_match_info |
6 | u_int8_t invert; | ||
7 | }; | ||
8 | 6 | ||
9 | #endif /*_IPT_TCPMSS_MATCH_H*/ | 7 | #endif /*_IPT_TCPMSS_MATCH_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index c163ba31aab7..f249b574f0fa 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -25,8 +25,15 @@ | |||
25 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
26 | #include <linux/netfilter_ipv6.h> | 26 | #include <linux/netfilter_ipv6.h> |
27 | 27 | ||
28 | #define IP6T_FUNCTION_MAXNAMELEN 30 | 28 | #include <linux/netfilter/x_tables.h> |
29 | #define IP6T_TABLE_MAXNAMELEN 32 | 29 | |
30 | #define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN | ||
31 | #define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN | ||
32 | |||
33 | #define ip6t_match xt_match | ||
34 | #define ip6t_target xt_target | ||
35 | #define ip6t_table xt_table | ||
36 | #define ip6t_get_revision xt_get_revision | ||
30 | 37 | ||
31 | /* Yes, Virginia, you have to zero the padding. */ | 38 | /* Yes, Virginia, you have to zero the padding. */ |
32 | struct ip6t_ip6 { | 39 | struct ip6t_ip6 { |
@@ -104,10 +111,7 @@ struct ip6t_standard_target | |||
104 | int verdict; | 111 | int verdict; |
105 | }; | 112 | }; |
106 | 113 | ||
107 | struct ip6t_counters | 114 | #define ip6t_counters xt_counters |
108 | { | ||
109 | u_int64_t pcnt, bcnt; /* Packet and byte counters */ | ||
110 | }; | ||
111 | 115 | ||
112 | /* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */ | 116 | /* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */ |
113 | #define IP6T_F_PROTO 0x01 /* Set if rule cares about upper | 117 | #define IP6T_F_PROTO 0x01 /* Set if rule cares about upper |
@@ -123,7 +127,7 @@ struct ip6t_counters | |||
123 | #define IP6T_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ | 127 | #define IP6T_INV_SRCIP 0x08 /* Invert the sense of SRC IP. */ |
124 | #define IP6T_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ | 128 | #define IP6T_INV_DSTIP 0x10 /* Invert the sense of DST OP. */ |
125 | #define IP6T_INV_FRAG 0x20 /* Invert the sense of FRAG. */ | 129 | #define IP6T_INV_FRAG 0x20 /* Invert the sense of FRAG. */ |
126 | #define IP6T_INV_PROTO 0x40 /* Invert the sense of PROTO. */ | 130 | #define IP6T_INV_PROTO XT_INV_PROTO |
127 | #define IP6T_INV_MASK 0x7F /* All possible flag bits mask. */ | 131 | #define IP6T_INV_MASK 0x7F /* All possible flag bits mask. */ |
128 | 132 | ||
129 | /* This structure defines each of the firewall rules. Consists of 3 | 133 | /* This structure defines each of the firewall rules. Consists of 3 |
@@ -145,7 +149,7 @@ struct ip6t_entry | |||
145 | unsigned int comefrom; | 149 | unsigned int comefrom; |
146 | 150 | ||
147 | /* Packet and byte counters. */ | 151 | /* Packet and byte counters. */ |
148 | struct ip6t_counters counters; | 152 | struct xt_counters counters; |
149 | 153 | ||
150 | /* The matches (if any), then the target. */ | 154 | /* The matches (if any), then the target. */ |
151 | unsigned char elems[0]; | 155 | unsigned char elems[0]; |
@@ -155,54 +159,41 @@ struct ip6t_entry | |||
155 | * New IP firewall options for [gs]etsockopt at the RAW IP level. | 159 | * New IP firewall options for [gs]etsockopt at the RAW IP level. |
156 | * Unlike BSD Linux inherits IP options so you don't have to use | 160 | * Unlike BSD Linux inherits IP options so you don't have to use |
157 | * a raw socket for this. Instead we check rights in the calls. */ | 161 | * a raw socket for this. Instead we check rights in the calls. */ |
158 | #define IP6T_BASE_CTL 64 /* base for firewall socket options */ | 162 | #define IP6T_BASE_CTL XT_BASE_CTL |
159 | 163 | ||
160 | #define IP6T_SO_SET_REPLACE (IP6T_BASE_CTL) | 164 | #define IP6T_SO_SET_REPLACE XT_SO_SET_REPLACE |
161 | #define IP6T_SO_SET_ADD_COUNTERS (IP6T_BASE_CTL + 1) | 165 | #define IP6T_SO_SET_ADD_COUNTERS XT_SO_SET_ADD_COUNTERS |
162 | #define IP6T_SO_SET_MAX IP6T_SO_SET_ADD_COUNTERS | 166 | #define IP6T_SO_SET_MAX XT_SO_SET_MAX |
163 | 167 | ||
164 | #define IP6T_SO_GET_INFO (IP6T_BASE_CTL) | 168 | #define IP6T_SO_GET_INFO XT_SO_GET_INFO |
165 | #define IP6T_SO_GET_ENTRIES (IP6T_BASE_CTL + 1) | 169 | #define IP6T_SO_GET_ENTRIES XT_SO_GET_ENTRIES |
166 | #define IP6T_SO_GET_REVISION_MATCH (IP6T_BASE_CTL + 2) | 170 | #define IP6T_SO_GET_REVISION_MATCH XT_SO_GET_REVISION_MATCH |
167 | #define IP6T_SO_GET_REVISION_TARGET (IP6T_BASE_CTL + 3) | 171 | #define IP6T_SO_GET_REVISION_TARGET XT_SO_GET_REVISION_TARGET |
168 | #define IP6T_SO_GET_MAX IP6T_SO_GET_REVISION_TARGET | 172 | #define IP6T_SO_GET_MAX XT_SO_GET_REVISION_TARGET |
169 | 173 | ||
170 | /* CONTINUE verdict for targets */ | 174 | /* CONTINUE verdict for targets */ |
171 | #define IP6T_CONTINUE 0xFFFFFFFF | 175 | #define IP6T_CONTINUE XT_CONTINUE |
172 | 176 | ||
173 | /* For standard target */ | 177 | /* For standard target */ |
174 | #define IP6T_RETURN (-NF_REPEAT - 1) | 178 | #define IP6T_RETURN XT_RETURN |
175 | 179 | ||
176 | /* TCP matching stuff */ | 180 | /* TCP/UDP matching stuff */ |
177 | struct ip6t_tcp | 181 | #include <linux/netfilter/xt_tcpudp.h> |
178 | { | 182 | |
179 | u_int16_t spts[2]; /* Source port range. */ | 183 | #define ip6t_tcp xt_tcp |
180 | u_int16_t dpts[2]; /* Destination port range. */ | 184 | #define ip6t_udp xt_udp |
181 | u_int8_t option; /* TCP Option iff non-zero*/ | ||
182 | u_int8_t flg_mask; /* TCP flags mask byte */ | ||
183 | u_int8_t flg_cmp; /* TCP flags compare byte */ | ||
184 | u_int8_t invflags; /* Inverse flags */ | ||
185 | }; | ||
186 | 185 | ||
187 | /* Values for "inv" field in struct ipt_tcp. */ | 186 | /* Values for "inv" field in struct ipt_tcp. */ |
188 | #define IP6T_TCP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | 187 | #define IP6T_TCP_INV_SRCPT XT_TCP_INV_SRCPT |
189 | #define IP6T_TCP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | 188 | #define IP6T_TCP_INV_DSTPT XT_TCP_INV_DSTPT |
190 | #define IP6T_TCP_INV_FLAGS 0x04 /* Invert the sense of TCP flags. */ | 189 | #define IP6T_TCP_INV_FLAGS XT_TCP_INV_FLAGS |
191 | #define IP6T_TCP_INV_OPTION 0x08 /* Invert the sense of option test. */ | 190 | #define IP6T_TCP_INV_OPTION XT_TCP_INV_OPTION |
192 | #define IP6T_TCP_INV_MASK 0x0F /* All possible flags. */ | 191 | #define IP6T_TCP_INV_MASK XT_TCP_INV_MASK |
193 | |||
194 | /* UDP matching stuff */ | ||
195 | struct ip6t_udp | ||
196 | { | ||
197 | u_int16_t spts[2]; /* Source port range. */ | ||
198 | u_int16_t dpts[2]; /* Destination port range. */ | ||
199 | u_int8_t invflags; /* Inverse flags */ | ||
200 | }; | ||
201 | 192 | ||
202 | /* Values for "invflags" field in struct ipt_udp. */ | 193 | /* Values for "invflags" field in struct ipt_udp. */ |
203 | #define IP6T_UDP_INV_SRCPT 0x01 /* Invert the sense of source ports. */ | 194 | #define IP6T_UDP_INV_SRCPT XT_UDP_INV_SRCPT |
204 | #define IP6T_UDP_INV_DSTPT 0x02 /* Invert the sense of dest ports. */ | 195 | #define IP6T_UDP_INV_DSTPT XT_UDP_INV_DSTPT |
205 | #define IP6T_UDP_INV_MASK 0x03 /* All possible flags. */ | 196 | #define IP6T_UDP_INV_MASK XT_UDP_INV_MASK |
206 | 197 | ||
207 | /* ICMP matching stuff */ | 198 | /* ICMP matching stuff */ |
208 | struct ip6t_icmp | 199 | struct ip6t_icmp |
@@ -264,23 +255,14 @@ struct ip6t_replace | |||
264 | /* Number of counters (must be equal to current number of entries). */ | 255 | /* Number of counters (must be equal to current number of entries). */ |
265 | unsigned int num_counters; | 256 | unsigned int num_counters; |
266 | /* The old entries' counters. */ | 257 | /* The old entries' counters. */ |
267 | struct ip6t_counters __user *counters; | 258 | struct xt_counters __user *counters; |
268 | 259 | ||
269 | /* The entries (hang off end: not really an array). */ | 260 | /* The entries (hang off end: not really an array). */ |
270 | struct ip6t_entry entries[0]; | 261 | struct ip6t_entry entries[0]; |
271 | }; | 262 | }; |
272 | 263 | ||
273 | /* The argument to IP6T_SO_ADD_COUNTERS. */ | 264 | /* The argument to IP6T_SO_ADD_COUNTERS. */ |
274 | struct ip6t_counters_info | 265 | #define ip6t_counters_info xt_counters_info |
275 | { | ||
276 | /* Which table. */ | ||
277 | char name[IP6T_TABLE_MAXNAMELEN]; | ||
278 | |||
279 | unsigned int num_counters; | ||
280 | |||
281 | /* The counters (actually `number' of these). */ | ||
282 | struct ip6t_counters counters[0]; | ||
283 | }; | ||
284 | 266 | ||
285 | /* The argument to IP6T_SO_GET_ENTRIES. */ | 267 | /* The argument to IP6T_SO_GET_ENTRIES. */ |
286 | struct ip6t_get_entries | 268 | struct ip6t_get_entries |
@@ -295,19 +277,10 @@ struct ip6t_get_entries | |||
295 | struct ip6t_entry entrytable[0]; | 277 | struct ip6t_entry entrytable[0]; |
296 | }; | 278 | }; |
297 | 279 | ||
298 | /* The argument to IP6T_SO_GET_REVISION_*. Returns highest revision | ||
299 | * kernel supports, if >= revision. */ | ||
300 | struct ip6t_get_revision | ||
301 | { | ||
302 | char name[IP6T_FUNCTION_MAXNAMELEN-1]; | ||
303 | |||
304 | u_int8_t revision; | ||
305 | }; | ||
306 | |||
307 | /* Standard return verdict, or do jump. */ | 280 | /* Standard return verdict, or do jump. */ |
308 | #define IP6T_STANDARD_TARGET "" | 281 | #define IP6T_STANDARD_TARGET XT_STANDARD_TARGET |
309 | /* Error verdict. */ | 282 | /* Error verdict. */ |
310 | #define IP6T_ERROR_TARGET "ERROR" | 283 | #define IP6T_ERROR_TARGET XT_ERROR_TARGET |
311 | 284 | ||
312 | /* Helper functions */ | 285 | /* Helper functions */ |
313 | static __inline__ struct ip6t_entry_target * | 286 | static __inline__ struct ip6t_entry_target * |
@@ -361,104 +334,11 @@ ip6t_get_target(struct ip6t_entry *e) | |||
361 | #include <linux/init.h> | 334 | #include <linux/init.h> |
362 | extern void ip6t_init(void) __init; | 335 | extern void ip6t_init(void) __init; |
363 | 336 | ||
364 | struct ip6t_match | 337 | #define ip6t_register_target(tgt) xt_register_target(AF_INET6, tgt) |
365 | { | 338 | #define ip6t_unregister_target(tgt) xt_unregister_target(AF_INET6, tgt) |
366 | struct list_head list; | ||
367 | |||
368 | const char name[IP6T_FUNCTION_MAXNAMELEN-1]; | ||
369 | |||
370 | u_int8_t revision; | ||
371 | |||
372 | /* Return true or false: return FALSE and set *hotdrop = 1 to | ||
373 | force immediate packet drop. */ | ||
374 | /* Arguments changed since 2.6.9, as this must now handle | ||
375 | non-linear skb, using skb_header_pointer and | ||
376 | skb_ip_make_writable. */ | ||
377 | int (*match)(const struct sk_buff *skb, | ||
378 | const struct net_device *in, | ||
379 | const struct net_device *out, | ||
380 | const void *matchinfo, | ||
381 | int offset, | ||
382 | unsigned int protoff, | ||
383 | int *hotdrop); | ||
384 | |||
385 | /* Called when user tries to insert an entry of this type. */ | ||
386 | /* Should return true or false. */ | ||
387 | int (*checkentry)(const char *tablename, | ||
388 | const struct ip6t_ip6 *ip, | ||
389 | void *matchinfo, | ||
390 | unsigned int matchinfosize, | ||
391 | unsigned int hook_mask); | ||
392 | |||
393 | /* Called when entry of this type deleted. */ | ||
394 | void (*destroy)(void *matchinfo, unsigned int matchinfosize); | ||
395 | |||
396 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
397 | struct module *me; | ||
398 | }; | ||
399 | |||
400 | /* Registration hooks for targets. */ | ||
401 | struct ip6t_target | ||
402 | { | ||
403 | struct list_head list; | ||
404 | |||
405 | const char name[IP6T_FUNCTION_MAXNAMELEN-1]; | ||
406 | |||
407 | u_int8_t revision; | ||
408 | |||
409 | /* Returns verdict. Argument order changed since 2.6.9, as this | ||
410 | must now handle non-linear skbs, using skb_copy_bits and | ||
411 | skb_ip_make_writable. */ | ||
412 | unsigned int (*target)(struct sk_buff **pskb, | ||
413 | const struct net_device *in, | ||
414 | const struct net_device *out, | ||
415 | unsigned int hooknum, | ||
416 | const void *targinfo, | ||
417 | void *userdata); | ||
418 | |||
419 | /* Called when user tries to insert an entry of this type: | ||
420 | hook_mask is a bitmask of hooks from which it can be | ||
421 | called. */ | ||
422 | /* Should return true or false. */ | ||
423 | int (*checkentry)(const char *tablename, | ||
424 | const struct ip6t_entry *e, | ||
425 | void *targinfo, | ||
426 | unsigned int targinfosize, | ||
427 | unsigned int hook_mask); | ||
428 | |||
429 | /* Called when entry of this type deleted. */ | ||
430 | void (*destroy)(void *targinfo, unsigned int targinfosize); | ||
431 | |||
432 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
433 | struct module *me; | ||
434 | }; | ||
435 | |||
436 | extern int ip6t_register_target(struct ip6t_target *target); | ||
437 | extern void ip6t_unregister_target(struct ip6t_target *target); | ||
438 | |||
439 | extern int ip6t_register_match(struct ip6t_match *match); | ||
440 | extern void ip6t_unregister_match(struct ip6t_match *match); | ||
441 | 339 | ||
442 | /* Furniture shopping... */ | 340 | #define ip6t_register_match(match) xt_register_match(AF_INET6, match) |
443 | struct ip6t_table | 341 | #define ip6t_unregister_match(match) xt_unregister_match(AF_INET6, match) |
444 | { | ||
445 | struct list_head list; | ||
446 | |||
447 | /* A unique name... */ | ||
448 | char name[IP6T_TABLE_MAXNAMELEN]; | ||
449 | |||
450 | /* What hooks you will enter on */ | ||
451 | unsigned int valid_hooks; | ||
452 | |||
453 | /* Lock for the curtain */ | ||
454 | rwlock_t lock; | ||
455 | |||
456 | /* Man behind the curtain... */ | ||
457 | struct ip6t_table_info *private; | ||
458 | |||
459 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | ||
460 | struct module *me; | ||
461 | }; | ||
462 | 342 | ||
463 | extern int ip6t_register_table(struct ip6t_table *table, | 343 | extern int ip6t_register_table(struct ip6t_table *table, |
464 | const struct ip6t_replace *repl); | 344 | const struct ip6t_replace *repl); |
diff --git a/include/linux/netfilter_ipv6/ip6t_MARK.h b/include/linux/netfilter_ipv6/ip6t_MARK.h index 7ade8d8f5246..7cf629a8ab92 100644 --- a/include/linux/netfilter_ipv6/ip6t_MARK.h +++ b/include/linux/netfilter_ipv6/ip6t_MARK.h | |||
@@ -1,8 +1,9 @@ | |||
1 | #ifndef _IP6T_MARK_H_target | 1 | #ifndef _IP6T_MARK_H_target |
2 | #define _IP6T_MARK_H_target | 2 | #define _IP6T_MARK_H_target |
3 | 3 | ||
4 | struct ip6t_mark_target_info { | 4 | /* Backwards compatibility for old userspace */ |
5 | unsigned long mark; | 5 | #include <linux/netfilter/xt_MARK.h> |
6 | }; | ||
7 | 6 | ||
8 | #endif /*_IPT_MARK_H_target*/ | 7 | #define ip6t_mark_target_info xt_mark_target_info |
8 | |||
9 | #endif /*_IP6T_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_length.h b/include/linux/netfilter_ipv6/ip6t_length.h index 7fc09f9f9d63..9e9689d03ed7 100644 --- a/include/linux/netfilter_ipv6/ip6t_length.h +++ b/include/linux/netfilter_ipv6/ip6t_length.h | |||
@@ -1,10 +1,8 @@ | |||
1 | #ifndef _IP6T_LENGTH_H | 1 | #ifndef _IP6T_LENGTH_H |
2 | #define _IP6T_LENGTH_H | 2 | #define _IP6T_LENGTH_H |
3 | 3 | ||
4 | struct ip6t_length_info { | 4 | #include <linux/netfilter/xt_length.h> |
5 | u_int16_t min, max; | 5 | #define ip6t_length_info xt_length_info |
6 | u_int8_t invert; | ||
7 | }; | ||
8 | 6 | ||
9 | #endif /*_IP6T_LENGTH_H*/ | 7 | #endif /*_IP6T_LENGTH_H*/ |
10 | 8 | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_limit.h b/include/linux/netfilter_ipv6/ip6t_limit.h index f2866e50f3b4..487e5ea342c6 100644 --- a/include/linux/netfilter_ipv6/ip6t_limit.h +++ b/include/linux/netfilter_ipv6/ip6t_limit.h | |||
@@ -1,21 +1,8 @@ | |||
1 | #ifndef _IP6T_RATE_H | 1 | #ifndef _IP6T_RATE_H |
2 | #define _IP6T_RATE_H | 2 | #define _IP6T_RATE_H |
3 | 3 | ||
4 | /* timings are in milliseconds. */ | 4 | #include <linux/netfilter/xt_limit.h> |
5 | #define IP6T_LIMIT_SCALE 10000 | 5 | #define IP6T_LIMIT_SCALE XT_LIMIT_SCALE |
6 | #define ip6t_rateinfo xt_rateinfo | ||
6 | 7 | ||
7 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | 8 | #endif /*_IP6T_RATE_H*/ |
8 | seconds, or one every 59 hours. */ | ||
9 | struct ip6t_rateinfo { | ||
10 | u_int32_t avg; /* Average secs between packets * scale */ | ||
11 | u_int32_t burst; /* Period multiplier for upper limit. */ | ||
12 | |||
13 | /* Used internally by the kernel */ | ||
14 | unsigned long prev; | ||
15 | u_int32_t credit; | ||
16 | u_int32_t credit_cap, cost; | ||
17 | |||
18 | /* Ugly, ugly fucker. */ | ||
19 | struct ip6t_rateinfo *master; | ||
20 | }; | ||
21 | #endif /*_IPT_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mac.h b/include/linux/netfilter_ipv6/ip6t_mac.h index 87c088c21848..ac58e83e9423 100644 --- a/include/linux/netfilter_ipv6/ip6t_mac.h +++ b/include/linux/netfilter_ipv6/ip6t_mac.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _IP6T_MAC_H | 1 | #ifndef _IP6T_MAC_H |
2 | #define _IP6T_MAC_H | 2 | #define _IP6T_MAC_H |
3 | 3 | ||
4 | struct ip6t_mac_info { | 4 | #include <linux/netfilter/xt_mac.h> |
5 | unsigned char srcaddr[ETH_ALEN]; | 5 | #define ip6t_mac_info xt_mac_info |
6 | int invert; | 6 | |
7 | }; | 7 | #endif /*_IP6T_MAC_H*/ |
8 | #endif /*_IPT_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mark.h b/include/linux/netfilter_ipv6/ip6t_mark.h index a734441e1c19..ff204951ddc3 100644 --- a/include/linux/netfilter_ipv6/ip6t_mark.h +++ b/include/linux/netfilter_ipv6/ip6t_mark.h | |||
@@ -1,9 +1,9 @@ | |||
1 | #ifndef _IP6T_MARK_H | 1 | #ifndef _IP6T_MARK_H |
2 | #define _IP6T_MARK_H | 2 | #define _IP6T_MARK_H |
3 | 3 | ||
4 | struct ip6t_mark_info { | 4 | /* Backwards compatibility for old userspace */ |
5 | unsigned long mark, mask; | 5 | #include <linux/netfilter/xt_mark.h> |
6 | u_int8_t invert; | 6 | |
7 | }; | 7 | #define ip6t_mark_info xt_mark_info |
8 | 8 | ||
9 | #endif /*_IPT_MARK_H*/ | 9 | #endif /*_IPT_MARK_H*/ |
diff --git a/include/linux/netfilter_ipv6/ip6t_physdev.h b/include/linux/netfilter_ipv6/ip6t_physdev.h index c234731cd66b..c161c0a81b55 100644 --- a/include/linux/netfilter_ipv6/ip6t_physdev.h +++ b/include/linux/netfilter_ipv6/ip6t_physdev.h | |||
@@ -1,24 +1,17 @@ | |||
1 | #ifndef _IP6T_PHYSDEV_H | 1 | #ifndef _IP6T_PHYSDEV_H |
2 | #define _IP6T_PHYSDEV_H | 2 | #define _IP6T_PHYSDEV_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | /* Backwards compatibility for old userspace */ |
5 | #include <linux/if.h> | ||
6 | #endif | ||
7 | 5 | ||
8 | #define IP6T_PHYSDEV_OP_IN 0x01 | 6 | #include <linux/netfilter/xt_physdev.h> |
9 | #define IP6T_PHYSDEV_OP_OUT 0x02 | ||
10 | #define IP6T_PHYSDEV_OP_BRIDGED 0x04 | ||
11 | #define IP6T_PHYSDEV_OP_ISIN 0x08 | ||
12 | #define IP6T_PHYSDEV_OP_ISOUT 0x10 | ||
13 | #define IP6T_PHYSDEV_OP_MASK (0x20 - 1) | ||
14 | 7 | ||
15 | struct ip6t_physdev_info { | 8 | #define IP6T_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN |
16 | char physindev[IFNAMSIZ]; | 9 | #define IP6T_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT |
17 | char in_mask[IFNAMSIZ]; | 10 | #define IP6T_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED |
18 | char physoutdev[IFNAMSIZ]; | 11 | #define IP6T_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN |
19 | char out_mask[IFNAMSIZ]; | 12 | #define IP6T_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT |
20 | u_int8_t invert; | 13 | #define IP6T_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK |
21 | u_int8_t bitmask; | 14 | |
22 | }; | 15 | #define ip6t_physdev_info xt_physdev_info |
23 | 16 | ||
24 | #endif /*_IP6T_PHYSDEV_H*/ | 17 | #endif /*_IP6T_PHYSDEV_H*/ |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 7fb397e3f2d3..5403257ae3e7 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -181,6 +181,7 @@ | |||
181 | #define PCI_DEVICE_ID_LSI_FC929X 0x0626 | 181 | #define PCI_DEVICE_ID_LSI_FC929X 0x0626 |
182 | #define PCI_DEVICE_ID_LSI_FC939X 0x0642 | 182 | #define PCI_DEVICE_ID_LSI_FC939X 0x0642 |
183 | #define PCI_DEVICE_ID_LSI_FC949X 0x0640 | 183 | #define PCI_DEVICE_ID_LSI_FC949X 0x0640 |
184 | #define PCI_DEVICE_ID_LSI_FC949ES 0x0646 | ||
184 | #define PCI_DEVICE_ID_LSI_FC919X 0x0628 | 185 | #define PCI_DEVICE_ID_LSI_FC919X 0x0628 |
185 | #define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701 | 186 | #define PCI_DEVICE_ID_NCR_YELLOWFIN 0x0701 |
186 | #define PCI_DEVICE_ID_LSI_61C102 0x0901 | 187 | #define PCI_DEVICE_ID_LSI_61C102 0x0901 |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 74488e49166d..aa6322d45198 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
@@ -146,6 +146,11 @@ struct property; | |||
146 | extern void proc_device_tree_init(void); | 146 | extern void proc_device_tree_init(void); |
147 | extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *); | 147 | extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *); |
148 | extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop); | 148 | extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop); |
149 | extern void proc_device_tree_remove_prop(struct proc_dir_entry *pde, | ||
150 | struct property *prop); | ||
151 | extern void proc_device_tree_update_prop(struct proc_dir_entry *pde, | ||
152 | struct property *newprop, | ||
153 | struct property *oldprop); | ||
149 | #endif /* CONFIG_PROC_DEVICETREE */ | 154 | #endif /* CONFIG_PROC_DEVICETREE */ |
150 | 155 | ||
151 | extern struct proc_dir_entry *proc_symlink(const char *, | 156 | extern struct proc_dir_entry *proc_symlink(const char *, |
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h index 48831eac2910..d0dd38b3a2fd 100644 --- a/include/linux/raid_class.h +++ b/include/linux/raid_class.h | |||
@@ -31,9 +31,11 @@ enum raid_level { | |||
31 | RAID_LEVEL_LINEAR, | 31 | RAID_LEVEL_LINEAR, |
32 | RAID_LEVEL_0, | 32 | RAID_LEVEL_0, |
33 | RAID_LEVEL_1, | 33 | RAID_LEVEL_1, |
34 | RAID_LEVEL_10, | ||
34 | RAID_LEVEL_3, | 35 | RAID_LEVEL_3, |
35 | RAID_LEVEL_4, | 36 | RAID_LEVEL_4, |
36 | RAID_LEVEL_5, | 37 | RAID_LEVEL_5, |
38 | RAID_LEVEL_50, | ||
37 | RAID_LEVEL_6, | 39 | RAID_LEVEL_6, |
38 | }; | 40 | }; |
39 | 41 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index a72e17135421..2df1a1a2fee5 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -160,6 +160,7 @@ extern unsigned long nr_iowait(void); | |||
160 | #define SCHED_NORMAL 0 | 160 | #define SCHED_NORMAL 0 |
161 | #define SCHED_FIFO 1 | 161 | #define SCHED_FIFO 1 |
162 | #define SCHED_RR 2 | 162 | #define SCHED_RR 2 |
163 | #define SCHED_BATCH 3 | ||
163 | 164 | ||
164 | struct sched_param { | 165 | struct sched_param { |
165 | int sched_priority; | 166 | int sched_priority; |
@@ -470,9 +471,9 @@ struct signal_struct { | |||
470 | 471 | ||
471 | /* | 472 | /* |
472 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT | 473 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT |
473 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL tasks are | 474 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH |
474 | * in the range MAX_RT_PRIO..MAX_PRIO-1. Priority values | 475 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority |
475 | * are inverted: lower p->prio value means higher priority. | 476 | * values are inverted: lower p->prio value means higher priority. |
476 | * | 477 | * |
477 | * The MAX_USER_RT_PRIO value allows the actual maximum | 478 | * The MAX_USER_RT_PRIO value allows the actual maximum |
478 | * RT priority to be separate from the value exported to | 479 | * RT priority to be separate from the value exported to |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index a8187c3c8a7b..ec351005bf9d 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -136,6 +136,7 @@ | |||
136 | #include <linux/spinlock.h> | 136 | #include <linux/spinlock.h> |
137 | #include <linux/sched.h> | 137 | #include <linux/sched.h> |
138 | #include <linux/tty.h> | 138 | #include <linux/tty.h> |
139 | #include <linux/mutex.h> | ||
139 | 140 | ||
140 | struct uart_port; | 141 | struct uart_port; |
141 | struct uart_info; | 142 | struct uart_info; |
@@ -284,7 +285,7 @@ struct uart_state { | |||
284 | struct uart_info *info; | 285 | struct uart_info *info; |
285 | struct uart_port *port; | 286 | struct uart_port *port; |
286 | 287 | ||
287 | struct semaphore sem; | 288 | struct mutex mutex; |
288 | }; | 289 | }; |
289 | 290 | ||
290 | #define UART_XMIT_SIZE PAGE_SIZE | 291 | #define UART_XMIT_SIZE PAGE_SIZE |
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index c3e598276e78..c057f0b32318 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
@@ -26,6 +26,8 @@ struct shmem_sb_info { | |||
26 | unsigned long free_blocks; /* How many are left for allocation */ | 26 | unsigned long free_blocks; /* How many are left for allocation */ |
27 | unsigned long max_inodes; /* How many inodes are allowed */ | 27 | unsigned long max_inodes; /* How many inodes are allowed */ |
28 | unsigned long free_inodes; /* How many are left for allocation */ | 28 | unsigned long free_inodes; /* How many are left for allocation */ |
29 | int policy; /* Default NUMA memory alloc policy */ | ||
30 | nodemask_t policy_nodes; /* nodemask for preferred and bind */ | ||
29 | spinlock_t stat_lock; | 31 | spinlock_t stat_lock; |
30 | }; | 32 | }; |
31 | 33 | ||
diff --git a/include/linux/smb_fs.h b/include/linux/smb_fs.h index c4153120ade6..621a3d3662f3 100644 --- a/include/linux/smb_fs.h +++ b/include/linux/smb_fs.h | |||
@@ -58,53 +58,6 @@ static inline struct smb_inode_info *SMB_I(struct inode *inode) | |||
58 | /* where to find the base of the SMB packet proper */ | 58 | /* where to find the base of the SMB packet proper */ |
59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) | 59 | #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4)) |
60 | 60 | ||
61 | #ifdef DEBUG_SMB_MALLOC | ||
62 | |||
63 | #include <linux/slab.h> | ||
64 | |||
65 | extern int smb_malloced; | ||
66 | extern int smb_current_vmalloced; | ||
67 | extern int smb_current_kmalloced; | ||
68 | |||
69 | static inline void * | ||
70 | smb_vmalloc(unsigned int size) | ||
71 | { | ||
72 | smb_malloced += 1; | ||
73 | smb_current_vmalloced += 1; | ||
74 | return vmalloc(size); | ||
75 | } | ||
76 | |||
77 | static inline void | ||
78 | smb_vfree(void *obj) | ||
79 | { | ||
80 | smb_current_vmalloced -= 1; | ||
81 | vfree(obj); | ||
82 | } | ||
83 | |||
84 | static inline void * | ||
85 | smb_kmalloc(size_t size, int flags) | ||
86 | { | ||
87 | smb_malloced += 1; | ||
88 | smb_current_kmalloced += 1; | ||
89 | return kmalloc(size, flags); | ||
90 | } | ||
91 | |||
92 | static inline void | ||
93 | smb_kfree(void *obj) | ||
94 | { | ||
95 | smb_current_kmalloced -= 1; | ||
96 | kfree(obj); | ||
97 | } | ||
98 | |||
99 | #else /* DEBUG_SMB_MALLOC */ | ||
100 | |||
101 | #define smb_kmalloc(s,p) kmalloc(s,p) | ||
102 | #define smb_kfree(o) kfree(o) | ||
103 | #define smb_vmalloc(s) vmalloc(s) | ||
104 | #define smb_vfree(o) vfree(o) | ||
105 | |||
106 | #endif /* DEBUG_SMB_MALLOC */ | ||
107 | |||
108 | /* | 61 | /* |
109 | * Flags for the in-memory inode | 62 | * Flags for the in-memory inode |
110 | */ | 63 | */ |
diff --git a/include/linux/socket.h b/include/linux/socket.h index 9f4019156fd8..b02dda4ee83d 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -186,6 +186,7 @@ struct ucred { | |||
186 | #define AF_PPPOX 24 /* PPPoX sockets */ | 186 | #define AF_PPPOX 24 /* PPPoX sockets */ |
187 | #define AF_WANPIPE 25 /* Wanpipe API Sockets */ | 187 | #define AF_WANPIPE 25 /* Wanpipe API Sockets */ |
188 | #define AF_LLC 26 /* Linux LLC */ | 188 | #define AF_LLC 26 /* Linux LLC */ |
189 | #define AF_TIPC 30 /* TIPC sockets */ | ||
189 | #define AF_BLUETOOTH 31 /* Bluetooth sockets */ | 190 | #define AF_BLUETOOTH 31 /* Bluetooth sockets */ |
190 | #define AF_MAX 32 /* For now.. */ | 191 | #define AF_MAX 32 /* For now.. */ |
191 | 192 | ||
@@ -218,6 +219,7 @@ struct ucred { | |||
218 | #define PF_PPPOX AF_PPPOX | 219 | #define PF_PPPOX AF_PPPOX |
219 | #define PF_WANPIPE AF_WANPIPE | 220 | #define PF_WANPIPE AF_WANPIPE |
220 | #define PF_LLC AF_LLC | 221 | #define PF_LLC AF_LLC |
222 | #define PF_TIPC AF_TIPC | ||
221 | #define PF_BLUETOOTH AF_BLUETOOTH | 223 | #define PF_BLUETOOTH AF_BLUETOOTH |
222 | #define PF_MAX AF_MAX | 224 | #define PF_MAX AF_MAX |
223 | 225 | ||
@@ -279,6 +281,7 @@ struct ucred { | |||
279 | #define SOL_LLC 268 | 281 | #define SOL_LLC 268 |
280 | #define SOL_DCCP 269 | 282 | #define SOL_DCCP 269 |
281 | #define SOL_NETLINK 270 | 283 | #define SOL_NETLINK 270 |
284 | #define SOL_TIPC 271 | ||
282 | 285 | ||
283 | /* IPX options */ | 286 | /* IPX options */ |
284 | #define IPX_TYPE 1 | 287 | #define IPX_TYPE 1 |
diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h new file mode 100644 index 000000000000..72261e0f2ac1 --- /dev/null +++ b/include/linux/spi/ads7846.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* linux/spi/ads7846.h */ | ||
2 | |||
3 | /* Touchscreen characteristics vary between boards and models. The | ||
4 | * platform_data for the device's "struct device" holds this information. | ||
5 | * | ||
6 | * It's OK if the min/max values are zero. | ||
7 | */ | ||
8 | struct ads7846_platform_data { | ||
9 | u16 model; /* 7843, 7845, 7846. */ | ||
10 | u16 vref_delay_usecs; /* 0 for external vref; etc */ | ||
11 | u16 x_plate_ohms; | ||
12 | u16 y_plate_ohms; | ||
13 | |||
14 | u16 x_min, x_max; | ||
15 | u16 y_min, y_max; | ||
16 | u16 pressure_min, pressure_max; | ||
17 | }; | ||
18 | |||
diff --git a/include/linux/spi/flash.h b/include/linux/spi/flash.h new file mode 100644 index 000000000000..3f22932e67a4 --- /dev/null +++ b/include/linux/spi/flash.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef LINUX_SPI_FLASH_H | ||
2 | #define LINUX_SPI_FLASH_H | ||
3 | |||
4 | struct mtd_partition; | ||
5 | |||
6 | /** | ||
7 | * struct flash_platform_data: board-specific flash data | ||
8 | * @name: optional flash device name (eg, as used with mtdparts=) | ||
9 | * @parts: optional array of mtd_partitions for static partitioning | ||
10 | * @nr_parts: number of mtd_partitions for static partitoning | ||
11 | * @type: optional flash device type (e.g. m25p80 vs m25p64), for use | ||
12 | * with chips that can't be queried for JEDEC or other IDs | ||
13 | * | ||
14 | * Board init code (in arch/.../mach-xxx/board-yyy.c files) can | ||
15 | * provide information about SPI flash parts (such as DataFlash) to | ||
16 | * help set up the device and its appropriate default partitioning. | ||
17 | * | ||
18 | * Note that for DataFlash, sizes for pages, blocks, and sectors are | ||
19 | * rarely powers of two; and partitions should be sector-aligned. | ||
20 | */ | ||
21 | struct flash_platform_data { | ||
22 | char *name; | ||
23 | struct mtd_partition *parts; | ||
24 | unsigned int nr_parts; | ||
25 | |||
26 | char *type; | ||
27 | |||
28 | /* we'll likely add more ... use JEDEC IDs, etc */ | ||
29 | }; | ||
30 | |||
31 | #endif | ||
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h new file mode 100644 index 000000000000..b05f1463a267 --- /dev/null +++ b/include/linux/spi/spi.h | |||
@@ -0,0 +1,668 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005 David Brownell | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __LINUX_SPI_H | ||
20 | #define __LINUX_SPI_H | ||
21 | |||
22 | /* | ||
23 | * INTERFACES between SPI master-side drivers and SPI infrastructure. | ||
24 | * (There's no SPI slave support for Linux yet...) | ||
25 | */ | ||
26 | extern struct bus_type spi_bus_type; | ||
27 | |||
28 | /** | ||
29 | * struct spi_device - Master side proxy for an SPI slave device | ||
30 | * @dev: Driver model representation of the device. | ||
31 | * @master: SPI controller used with the device. | ||
32 | * @max_speed_hz: Maximum clock rate to be used with this chip | ||
33 | * (on this board); may be changed by the device's driver. | ||
34 | * @chip-select: Chipselect, distinguishing chips handled by "master". | ||
35 | * @mode: The spi mode defines how data is clocked out and in. | ||
36 | * This may be changed by the device's driver. | ||
37 | * @bits_per_word: Data transfers involve one or more words; word sizes | ||
38 | * like eight or 12 bits are common. In-memory wordsizes are | ||
39 | * powers of two bytes (e.g. 20 bit samples use 32 bits). | ||
40 | * This may be changed by the device's driver. | ||
41 | * @irq: Negative, or the number passed to request_irq() to receive | ||
42 | * interrupts from this device. | ||
43 | * @controller_state: Controller's runtime state | ||
44 | * @controller_data: Board-specific definitions for controller, such as | ||
45 | * FIFO initialization parameters; from board_info.controller_data | ||
46 | * | ||
47 | * An spi_device is used to interchange data between an SPI slave | ||
48 | * (usually a discrete chip) and CPU memory. | ||
49 | * | ||
50 | * In "dev", the platform_data is used to hold information about this | ||
51 | * device that's meaningful to the device's protocol driver, but not | ||
52 | * to its controller. One example might be an identifier for a chip | ||
53 | * variant with slightly different functionality. | ||
54 | */ | ||
55 | struct spi_device { | ||
56 | struct device dev; | ||
57 | struct spi_master *master; | ||
58 | u32 max_speed_hz; | ||
59 | u8 chip_select; | ||
60 | u8 mode; | ||
61 | #define SPI_CPHA 0x01 /* clock phase */ | ||
62 | #define SPI_CPOL 0x02 /* clock polarity */ | ||
63 | #define SPI_MODE_0 (0|0) /* (original MicroWire) */ | ||
64 | #define SPI_MODE_1 (0|SPI_CPHA) | ||
65 | #define SPI_MODE_2 (SPI_CPOL|0) | ||
66 | #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA) | ||
67 | #define SPI_CS_HIGH 0x04 /* chipselect active high? */ | ||
68 | u8 bits_per_word; | ||
69 | int irq; | ||
70 | void *controller_state; | ||
71 | void *controller_data; | ||
72 | const char *modalias; | ||
73 | |||
74 | // likely need more hooks for more protocol options affecting how | ||
75 | // the controller talks to each chip, like: | ||
76 | // - bit order (default is wordwise msb-first) | ||
77 | // - memory packing (12 bit samples into low bits, others zeroed) | ||
78 | // - priority | ||
79 | // - drop chipselect after each word | ||
80 | // - chipselect delays | ||
81 | // - ... | ||
82 | }; | ||
83 | |||
84 | static inline struct spi_device *to_spi_device(struct device *dev) | ||
85 | { | ||
86 | return dev ? container_of(dev, struct spi_device, dev) : NULL; | ||
87 | } | ||
88 | |||
89 | /* most drivers won't need to care about device refcounting */ | ||
90 | static inline struct spi_device *spi_dev_get(struct spi_device *spi) | ||
91 | { | ||
92 | return (spi && get_device(&spi->dev)) ? spi : NULL; | ||
93 | } | ||
94 | |||
95 | static inline void spi_dev_put(struct spi_device *spi) | ||
96 | { | ||
97 | if (spi) | ||
98 | put_device(&spi->dev); | ||
99 | } | ||
100 | |||
101 | /* ctldata is for the bus_master driver's runtime state */ | ||
102 | static inline void *spi_get_ctldata(struct spi_device *spi) | ||
103 | { | ||
104 | return spi->controller_state; | ||
105 | } | ||
106 | |||
107 | static inline void spi_set_ctldata(struct spi_device *spi, void *state) | ||
108 | { | ||
109 | spi->controller_state = state; | ||
110 | } | ||
111 | |||
112 | |||
113 | struct spi_message; | ||
114 | |||
115 | |||
116 | |||
117 | struct spi_driver { | ||
118 | int (*probe)(struct spi_device *spi); | ||
119 | int (*remove)(struct spi_device *spi); | ||
120 | void (*shutdown)(struct spi_device *spi); | ||
121 | int (*suspend)(struct spi_device *spi, pm_message_t mesg); | ||
122 | int (*resume)(struct spi_device *spi); | ||
123 | struct device_driver driver; | ||
124 | }; | ||
125 | |||
126 | static inline struct spi_driver *to_spi_driver(struct device_driver *drv) | ||
127 | { | ||
128 | return drv ? container_of(drv, struct spi_driver, driver) : NULL; | ||
129 | } | ||
130 | |||
131 | extern int spi_register_driver(struct spi_driver *sdrv); | ||
132 | |||
133 | static inline void spi_unregister_driver(struct spi_driver *sdrv) | ||
134 | { | ||
135 | if (!sdrv) | ||
136 | return; | ||
137 | driver_unregister(&sdrv->driver); | ||
138 | } | ||
139 | |||
140 | |||
141 | |||
142 | /** | ||
143 | * struct spi_master - interface to SPI master controller | ||
144 | * @cdev: class interface to this driver | ||
145 | * @bus_num: board-specific (and often SOC-specific) identifier for a | ||
146 | * given SPI controller. | ||
147 | * @num_chipselect: chipselects are used to distinguish individual | ||
148 | * SPI slaves, and are numbered from zero to num_chipselects. | ||
149 | * each slave has a chipselect signal, but it's common that not | ||
150 | * every chipselect is connected to a slave. | ||
151 | * @setup: updates the device mode and clocking records used by a | ||
152 | * device's SPI controller; protocol code may call this. | ||
153 | * @transfer: adds a message to the controller's transfer queue. | ||
154 | * @cleanup: frees controller-specific state | ||
155 | * | ||
156 | * Each SPI master controller can communicate with one or more spi_device | ||
157 | * children. These make a small bus, sharing MOSI, MISO and SCK signals | ||
158 | * but not chip select signals. Each device may be configured to use a | ||
159 | * different clock rate, since those shared signals are ignored unless | ||
160 | * the chip is selected. | ||
161 | * | ||
162 | * The driver for an SPI controller manages access to those devices through | ||
163 | * a queue of spi_message transactions, copyin data between CPU memory and | ||
164 | * an SPI slave device). For each such message it queues, it calls the | ||
165 | * message's completion function when the transaction completes. | ||
166 | */ | ||
167 | struct spi_master { | ||
168 | struct class_device cdev; | ||
169 | |||
170 | /* other than zero (== assign one dynamically), bus_num is fully | ||
171 | * board-specific. usually that simplifies to being SOC-specific. | ||
172 | * example: one SOC has three SPI controllers, numbered 1..3, | ||
173 | * and one board's schematics might show it using SPI-2. software | ||
174 | * would normally use bus_num=2 for that controller. | ||
175 | */ | ||
176 | u16 bus_num; | ||
177 | |||
178 | /* chipselects will be integral to many controllers; some others | ||
179 | * might use board-specific GPIOs. | ||
180 | */ | ||
181 | u16 num_chipselect; | ||
182 | |||
183 | /* setup mode and clock, etc (spi driver may call many times) */ | ||
184 | int (*setup)(struct spi_device *spi); | ||
185 | |||
186 | /* bidirectional bulk transfers | ||
187 | * | ||
188 | * + The transfer() method may not sleep; its main role is | ||
189 | * just to add the message to the queue. | ||
190 | * + For now there's no remove-from-queue operation, or | ||
191 | * any other request management | ||
192 | * + To a given spi_device, message queueing is pure fifo | ||
193 | * | ||
194 | * + The master's main job is to process its message queue, | ||
195 | * selecting a chip then transferring data | ||
196 | * + If there are multiple spi_device children, the i/o queue | ||
197 | * arbitration algorithm is unspecified (round robin, fifo, | ||
198 | * priority, reservations, preemption, etc) | ||
199 | * | ||
200 | * + Chipselect stays active during the entire message | ||
201 | * (unless modified by spi_transfer.cs_change != 0). | ||
202 | * + The message transfers use clock and SPI mode parameters | ||
203 | * previously established by setup() for this device | ||
204 | */ | ||
205 | int (*transfer)(struct spi_device *spi, | ||
206 | struct spi_message *mesg); | ||
207 | |||
208 | /* called on release() to free memory provided by spi_master */ | ||
209 | void (*cleanup)(const struct spi_device *spi); | ||
210 | }; | ||
211 | |||
212 | static inline void *spi_master_get_devdata(struct spi_master *master) | ||
213 | { | ||
214 | return class_get_devdata(&master->cdev); | ||
215 | } | ||
216 | |||
217 | static inline void spi_master_set_devdata(struct spi_master *master, void *data) | ||
218 | { | ||
219 | class_set_devdata(&master->cdev, data); | ||
220 | } | ||
221 | |||
222 | static inline struct spi_master *spi_master_get(struct spi_master *master) | ||
223 | { | ||
224 | if (!master || !class_device_get(&master->cdev)) | ||
225 | return NULL; | ||
226 | return master; | ||
227 | } | ||
228 | |||
229 | static inline void spi_master_put(struct spi_master *master) | ||
230 | { | ||
231 | if (master) | ||
232 | class_device_put(&master->cdev); | ||
233 | } | ||
234 | |||
235 | |||
236 | /* the spi driver core manages memory for the spi_master classdev */ | ||
237 | extern struct spi_master * | ||
238 | spi_alloc_master(struct device *host, unsigned size); | ||
239 | |||
240 | extern int spi_register_master(struct spi_master *master); | ||
241 | extern void spi_unregister_master(struct spi_master *master); | ||
242 | |||
243 | extern struct spi_master *spi_busnum_to_master(u16 busnum); | ||
244 | |||
245 | /*---------------------------------------------------------------------------*/ | ||
246 | |||
247 | /* | ||
248 | * I/O INTERFACE between SPI controller and protocol drivers | ||
249 | * | ||
250 | * Protocol drivers use a queue of spi_messages, each transferring data | ||
251 | * between the controller and memory buffers. | ||
252 | * | ||
253 | * The spi_messages themselves consist of a series of read+write transfer | ||
254 | * segments. Those segments always read the same number of bits as they | ||
255 | * write; but one or the other is easily ignored by passing a null buffer | ||
256 | * pointer. (This is unlike most types of I/O API, because SPI hardware | ||
257 | * is full duplex.) | ||
258 | * | ||
259 | * NOTE: Allocation of spi_transfer and spi_message memory is entirely | ||
260 | * up to the protocol driver, which guarantees the integrity of both (as | ||
261 | * well as the data buffers) for as long as the message is queued. | ||
262 | */ | ||
263 | |||
264 | /** | ||
265 | * struct spi_transfer - a read/write buffer pair | ||
266 | * @tx_buf: data to be written (dma-safe memory), or NULL | ||
267 | * @rx_buf: data to be read (dma-safe memory), or NULL | ||
268 | * @tx_dma: DMA address of tx_buf, if spi_message.is_dma_mapped | ||
269 | * @rx_dma: DMA address of rx_buf, if spi_message.is_dma_mapped | ||
270 | * @len: size of rx and tx buffers (in bytes) | ||
271 | * @cs_change: affects chipselect after this transfer completes | ||
272 | * @delay_usecs: microseconds to delay after this transfer before | ||
273 | * (optionally) changing the chipselect status, then starting | ||
274 | * the next transfer or completing this spi_message. | ||
275 | * @transfer_list: transfers are sequenced through spi_message.transfers | ||
276 | * | ||
277 | * SPI transfers always write the same number of bytes as they read. | ||
278 | * Protocol drivers should always provide rx_buf and/or tx_buf. | ||
279 | * In some cases, they may also want to provide DMA addresses for | ||
280 | * the data being transferred; that may reduce overhead, when the | ||
281 | * underlying driver uses dma. | ||
282 | * | ||
283 | * If the transmit buffer is null, undefined data will be shifted out | ||
284 | * while filling rx_buf. If the receive buffer is null, the data | ||
285 | * shifted in will be discarded. Only "len" bytes shift out (or in). | ||
286 | * It's an error to try to shift out a partial word. (For example, by | ||
287 | * shifting out three bytes with word size of sixteen or twenty bits; | ||
288 | * the former uses two bytes per word, the latter uses four bytes.) | ||
289 | * | ||
290 | * All SPI transfers start with the relevant chipselect active. Normally | ||
291 | * it stays selected until after the last transfer in a message. Drivers | ||
292 | * can affect the chipselect signal using cs_change: | ||
293 | * | ||
294 | * (i) If the transfer isn't the last one in the message, this flag is | ||
295 | * used to make the chipselect briefly go inactive in the middle of the | ||
296 | * message. Toggling chipselect in this way may be needed to terminate | ||
297 | * a chip command, letting a single spi_message perform all of group of | ||
298 | * chip transactions together. | ||
299 | * | ||
300 | * (ii) When the transfer is the last one in the message, the chip may | ||
301 | * stay selected until the next transfer. This is purely a performance | ||
302 | * hint; the controller driver may need to select a different device | ||
303 | * for the next message. | ||
304 | * | ||
305 | * The code that submits an spi_message (and its spi_transfers) | ||
306 | * to the lower layers is responsible for managing its memory. | ||
307 | * Zero-initialize every field you don't set up explicitly, to | ||
308 | * insulate against future API updates. After you submit a message | ||
309 | * and its transfers, ignore them until its completion callback. | ||
310 | */ | ||
311 | struct spi_transfer { | ||
312 | /* it's ok if tx_buf == rx_buf (right?) | ||
313 | * for MicroWire, one buffer must be null | ||
314 | * buffers must work with dma_*map_single() calls, unless | ||
315 | * spi_message.is_dma_mapped reports a pre-existing mapping | ||
316 | */ | ||
317 | const void *tx_buf; | ||
318 | void *rx_buf; | ||
319 | unsigned len; | ||
320 | |||
321 | dma_addr_t tx_dma; | ||
322 | dma_addr_t rx_dma; | ||
323 | |||
324 | unsigned cs_change:1; | ||
325 | u16 delay_usecs; | ||
326 | |||
327 | struct list_head transfer_list; | ||
328 | }; | ||
329 | |||
330 | /** | ||
331 | * struct spi_message - one multi-segment SPI transaction | ||
332 | * @transfers: list of transfer segments in this transaction | ||
333 | * @spi: SPI device to which the transaction is queued | ||
334 | * @is_dma_mapped: if true, the caller provided both dma and cpu virtual | ||
335 | * addresses for each transfer buffer | ||
336 | * @complete: called to report transaction completions | ||
337 | * @context: the argument to complete() when it's called | ||
338 | * @actual_length: the total number of bytes that were transferred in all | ||
339 | * successful segments | ||
340 | * @status: zero for success, else negative errno | ||
341 | * @queue: for use by whichever driver currently owns the message | ||
342 | * @state: for use by whichever driver currently owns the message | ||
343 | * | ||
344 | * An spi_message is used to execute an atomic sequence of data transfers, | ||
345 | * each represented by a struct spi_transfer. The sequence is "atomic" | ||
346 | * in the sense that no other spi_message may use that SPI bus until that | ||
347 | * sequence completes. On some systems, many such sequences can execute as | ||
348 | * as single programmed DMA transfer. On all systems, these messages are | ||
349 | * queued, and might complete after transactions to other devices. Messages | ||
350 | * sent to a given spi_device are alway executed in FIFO order. | ||
351 | * | ||
352 | * The code that submits an spi_message (and its spi_transfers) | ||
353 | * to the lower layers is responsible for managing its memory. | ||
354 | * Zero-initialize every field you don't set up explicitly, to | ||
355 | * insulate against future API updates. After you submit a message | ||
356 | * and its transfers, ignore them until its completion callback. | ||
357 | */ | ||
358 | struct spi_message { | ||
359 | struct list_head transfers; | ||
360 | |||
361 | struct spi_device *spi; | ||
362 | |||
363 | unsigned is_dma_mapped:1; | ||
364 | |||
365 | /* REVISIT: we might want a flag affecting the behavior of the | ||
366 | * last transfer ... allowing things like "read 16 bit length L" | ||
367 | * immediately followed by "read L bytes". Basically imposing | ||
368 | * a specific message scheduling algorithm. | ||
369 | * | ||
370 | * Some controller drivers (message-at-a-time queue processing) | ||
371 | * could provide that as their default scheduling algorithm. But | ||
372 | * others (with multi-message pipelines) could need a flag to | ||
373 | * tell them about such special cases. | ||
374 | */ | ||
375 | |||
376 | /* completion is reported through a callback */ | ||
377 | void (*complete)(void *context); | ||
378 | void *context; | ||
379 | unsigned actual_length; | ||
380 | int status; | ||
381 | |||
382 | /* for optional use by whatever driver currently owns the | ||
383 | * spi_message ... between calls to spi_async and then later | ||
384 | * complete(), that's the spi_master controller driver. | ||
385 | */ | ||
386 | struct list_head queue; | ||
387 | void *state; | ||
388 | }; | ||
389 | |||
390 | static inline void spi_message_init(struct spi_message *m) | ||
391 | { | ||
392 | memset(m, 0, sizeof *m); | ||
393 | INIT_LIST_HEAD(&m->transfers); | ||
394 | } | ||
395 | |||
396 | static inline void | ||
397 | spi_message_add_tail(struct spi_transfer *t, struct spi_message *m) | ||
398 | { | ||
399 | list_add_tail(&t->transfer_list, &m->transfers); | ||
400 | } | ||
401 | |||
402 | static inline void | ||
403 | spi_transfer_del(struct spi_transfer *t) | ||
404 | { | ||
405 | list_del(&t->transfer_list); | ||
406 | } | ||
407 | |||
408 | /* It's fine to embed message and transaction structures in other data | ||
409 | * structures so long as you don't free them while they're in use. | ||
410 | */ | ||
411 | |||
412 | static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags) | ||
413 | { | ||
414 | struct spi_message *m; | ||
415 | |||
416 | m = kzalloc(sizeof(struct spi_message) | ||
417 | + ntrans * sizeof(struct spi_transfer), | ||
418 | flags); | ||
419 | if (m) { | ||
420 | int i; | ||
421 | struct spi_transfer *t = (struct spi_transfer *)(m + 1); | ||
422 | |||
423 | INIT_LIST_HEAD(&m->transfers); | ||
424 | for (i = 0; i < ntrans; i++, t++) | ||
425 | spi_message_add_tail(t, m); | ||
426 | } | ||
427 | return m; | ||
428 | } | ||
429 | |||
430 | static inline void spi_message_free(struct spi_message *m) | ||
431 | { | ||
432 | kfree(m); | ||
433 | } | ||
434 | |||
435 | /** | ||
436 | * spi_setup -- setup SPI mode and clock rate | ||
437 | * @spi: the device whose settings are being modified | ||
438 | * | ||
439 | * SPI protocol drivers may need to update the transfer mode if the | ||
440 | * device doesn't work with the mode 0 default. They may likewise need | ||
441 | * to update clock rates or word sizes from initial values. This function | ||
442 | * changes those settings, and must be called from a context that can sleep. | ||
443 | * The changes take effect the next time the device is selected and data | ||
444 | * is transferred to or from it. | ||
445 | */ | ||
446 | static inline int | ||
447 | spi_setup(struct spi_device *spi) | ||
448 | { | ||
449 | return spi->master->setup(spi); | ||
450 | } | ||
451 | |||
452 | |||
453 | /** | ||
454 | * spi_async -- asynchronous SPI transfer | ||
455 | * @spi: device with which data will be exchanged | ||
456 | * @message: describes the data transfers, including completion callback | ||
457 | * | ||
458 | * This call may be used in_irq and other contexts which can't sleep, | ||
459 | * as well as from task contexts which can sleep. | ||
460 | * | ||
461 | * The completion callback is invoked in a context which can't sleep. | ||
462 | * Before that invocation, the value of message->status is undefined. | ||
463 | * When the callback is issued, message->status holds either zero (to | ||
464 | * indicate complete success) or a negative error code. After that | ||
465 | * callback returns, the driver which issued the transfer request may | ||
466 | * deallocate the associated memory; it's no longer in use by any SPI | ||
467 | * core or controller driver code. | ||
468 | * | ||
469 | * Note that although all messages to a spi_device are handled in | ||
470 | * FIFO order, messages may go to different devices in other orders. | ||
471 | * Some device might be higher priority, or have various "hard" access | ||
472 | * time requirements, for example. | ||
473 | * | ||
474 | * On detection of any fault during the transfer, processing of | ||
475 | * the entire message is aborted, and the device is deselected. | ||
476 | * Until returning from the associated message completion callback, | ||
477 | * no other spi_message queued to that device will be processed. | ||
478 | * (This rule applies equally to all the synchronous transfer calls, | ||
479 | * which are wrappers around this core asynchronous primitive.) | ||
480 | */ | ||
481 | static inline int | ||
482 | spi_async(struct spi_device *spi, struct spi_message *message) | ||
483 | { | ||
484 | message->spi = spi; | ||
485 | return spi->master->transfer(spi, message); | ||
486 | } | ||
487 | |||
488 | /*---------------------------------------------------------------------------*/ | ||
489 | |||
490 | /* All these synchronous SPI transfer routines are utilities layered | ||
491 | * over the core async transfer primitive. Here, "synchronous" means | ||
492 | * they will sleep uninterruptibly until the async transfer completes. | ||
493 | */ | ||
494 | |||
495 | extern int spi_sync(struct spi_device *spi, struct spi_message *message); | ||
496 | |||
497 | /** | ||
498 | * spi_write - SPI synchronous write | ||
499 | * @spi: device to which data will be written | ||
500 | * @buf: data buffer | ||
501 | * @len: data buffer size | ||
502 | * | ||
503 | * This writes the buffer and returns zero or a negative error code. | ||
504 | * Callable only from contexts that can sleep. | ||
505 | */ | ||
506 | static inline int | ||
507 | spi_write(struct spi_device *spi, const u8 *buf, size_t len) | ||
508 | { | ||
509 | struct spi_transfer t = { | ||
510 | .tx_buf = buf, | ||
511 | .len = len, | ||
512 | }; | ||
513 | struct spi_message m; | ||
514 | |||
515 | spi_message_init(&m); | ||
516 | spi_message_add_tail(&t, &m); | ||
517 | return spi_sync(spi, &m); | ||
518 | } | ||
519 | |||
520 | /** | ||
521 | * spi_read - SPI synchronous read | ||
522 | * @spi: device from which data will be read | ||
523 | * @buf: data buffer | ||
524 | * @len: data buffer size | ||
525 | * | ||
526 | * This writes the buffer and returns zero or a negative error code. | ||
527 | * Callable only from contexts that can sleep. | ||
528 | */ | ||
529 | static inline int | ||
530 | spi_read(struct spi_device *spi, u8 *buf, size_t len) | ||
531 | { | ||
532 | struct spi_transfer t = { | ||
533 | .rx_buf = buf, | ||
534 | .len = len, | ||
535 | }; | ||
536 | struct spi_message m; | ||
537 | |||
538 | spi_message_init(&m); | ||
539 | spi_message_add_tail(&t, &m); | ||
540 | return spi_sync(spi, &m); | ||
541 | } | ||
542 | |||
543 | /* this copies txbuf and rxbuf data; for small transfers only! */ | ||
544 | extern int spi_write_then_read(struct spi_device *spi, | ||
545 | const u8 *txbuf, unsigned n_tx, | ||
546 | u8 *rxbuf, unsigned n_rx); | ||
547 | |||
548 | /** | ||
549 | * spi_w8r8 - SPI synchronous 8 bit write followed by 8 bit read | ||
550 | * @spi: device with which data will be exchanged | ||
551 | * @cmd: command to be written before data is read back | ||
552 | * | ||
553 | * This returns the (unsigned) eight bit number returned by the | ||
554 | * device, or else a negative error code. Callable only from | ||
555 | * contexts that can sleep. | ||
556 | */ | ||
557 | static inline ssize_t spi_w8r8(struct spi_device *spi, u8 cmd) | ||
558 | { | ||
559 | ssize_t status; | ||
560 | u8 result; | ||
561 | |||
562 | status = spi_write_then_read(spi, &cmd, 1, &result, 1); | ||
563 | |||
564 | /* return negative errno or unsigned value */ | ||
565 | return (status < 0) ? status : result; | ||
566 | } | ||
567 | |||
568 | /** | ||
569 | * spi_w8r16 - SPI synchronous 8 bit write followed by 16 bit read | ||
570 | * @spi: device with which data will be exchanged | ||
571 | * @cmd: command to be written before data is read back | ||
572 | * | ||
573 | * This returns the (unsigned) sixteen bit number returned by the | ||
574 | * device, or else a negative error code. Callable only from | ||
575 | * contexts that can sleep. | ||
576 | * | ||
577 | * The number is returned in wire-order, which is at least sometimes | ||
578 | * big-endian. | ||
579 | */ | ||
580 | static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd) | ||
581 | { | ||
582 | ssize_t status; | ||
583 | u16 result; | ||
584 | |||
585 | status = spi_write_then_read(spi, &cmd, 1, (u8 *) &result, 2); | ||
586 | |||
587 | /* return negative errno or unsigned value */ | ||
588 | return (status < 0) ? status : result; | ||
589 | } | ||
590 | |||
591 | /*---------------------------------------------------------------------------*/ | ||
592 | |||
593 | /* | ||
594 | * INTERFACE between board init code and SPI infrastructure. | ||
595 | * | ||
596 | * No SPI driver ever sees these SPI device table segments, but | ||
597 | * it's how the SPI core (or adapters that get hotplugged) grows | ||
598 | * the driver model tree. | ||
599 | * | ||
600 | * As a rule, SPI devices can't be probed. Instead, board init code | ||
601 | * provides a table listing the devices which are present, with enough | ||
602 | * information to bind and set up the device's driver. There's basic | ||
603 | * support for nonstatic configurations too; enough to handle adding | ||
604 | * parport adapters, or microcontrollers acting as USB-to-SPI bridges. | ||
605 | */ | ||
606 | |||
607 | /* board-specific information about each SPI device */ | ||
608 | struct spi_board_info { | ||
609 | /* the device name and module name are coupled, like platform_bus; | ||
610 | * "modalias" is normally the driver name. | ||
611 | * | ||
612 | * platform_data goes to spi_device.dev.platform_data, | ||
613 | * controller_data goes to spi_device.controller_data, | ||
614 | * irq is copied too | ||
615 | */ | ||
616 | char modalias[KOBJ_NAME_LEN]; | ||
617 | const void *platform_data; | ||
618 | void *controller_data; | ||
619 | int irq; | ||
620 | |||
621 | /* slower signaling on noisy or low voltage boards */ | ||
622 | u32 max_speed_hz; | ||
623 | |||
624 | |||
625 | /* bus_num is board specific and matches the bus_num of some | ||
626 | * spi_master that will probably be registered later. | ||
627 | * | ||
628 | * chip_select reflects how this chip is wired to that master; | ||
629 | * it's less than num_chipselect. | ||
630 | */ | ||
631 | u16 bus_num; | ||
632 | u16 chip_select; | ||
633 | |||
634 | /* ... may need additional spi_device chip config data here. | ||
635 | * avoid stuff protocol drivers can set; but include stuff | ||
636 | * needed to behave without being bound to a driver: | ||
637 | * - chipselect polarity | ||
638 | * - quirks like clock rate mattering when not selected | ||
639 | */ | ||
640 | }; | ||
641 | |||
642 | #ifdef CONFIG_SPI | ||
643 | extern int | ||
644 | spi_register_board_info(struct spi_board_info const *info, unsigned n); | ||
645 | #else | ||
646 | /* board init code may ignore whether SPI is configured or not */ | ||
647 | static inline int | ||
648 | spi_register_board_info(struct spi_board_info const *info, unsigned n) | ||
649 | { return 0; } | ||
650 | #endif | ||
651 | |||
652 | |||
653 | /* If you're hotplugging an adapter with devices (parport, usb, etc) | ||
654 | * use spi_new_device() to describe each device. You can also call | ||
655 | * spi_unregister_device() to start making that device vanish, but | ||
656 | * normally that would be handled by spi_unregister_master(). | ||
657 | */ | ||
658 | extern struct spi_device * | ||
659 | spi_new_device(struct spi_master *, struct spi_board_info *); | ||
660 | |||
661 | static inline void | ||
662 | spi_unregister_device(struct spi_device *spi) | ||
663 | { | ||
664 | if (spi) | ||
665 | device_unregister(&spi->dev); | ||
666 | } | ||
667 | |||
668 | #endif /* __LINUX_SPI_H */ | ||
diff --git a/include/linux/spi/spi_bitbang.h b/include/linux/spi/spi_bitbang.h new file mode 100644 index 000000000000..c961fe9bf3eb --- /dev/null +++ b/include/linux/spi/spi_bitbang.h | |||
@@ -0,0 +1,135 @@ | |||
1 | #ifndef __SPI_BITBANG_H | ||
2 | #define __SPI_BITBANG_H | ||
3 | |||
4 | /* | ||
5 | * Mix this utility code with some glue code to get one of several types of | ||
6 | * simple SPI master driver. Two do polled word-at-a-time I/O: | ||
7 | * | ||
8 | * - GPIO/parport bitbangers. Provide chipselect() and txrx_word[](), | ||
9 | * expanding the per-word routines from the inline templates below. | ||
10 | * | ||
11 | * - Drivers for controllers resembling bare shift registers. Provide | ||
12 | * chipselect() and txrx_word[](), with custom setup()/cleanup() methods | ||
13 | * that use your controller's clock and chipselect registers. | ||
14 | * | ||
15 | * Some hardware works well with requests at spi_transfer scope: | ||
16 | * | ||
17 | * - Drivers leveraging smarter hardware, with fifos or DMA; or for half | ||
18 | * duplex (MicroWire) controllers. Provide chipslect() and txrx_bufs(), | ||
19 | * and custom setup()/cleanup() methods. | ||
20 | */ | ||
21 | struct spi_bitbang { | ||
22 | struct workqueue_struct *workqueue; | ||
23 | struct work_struct work; | ||
24 | |||
25 | spinlock_t lock; | ||
26 | struct list_head queue; | ||
27 | u8 busy; | ||
28 | u8 shutdown; | ||
29 | u8 use_dma; | ||
30 | |||
31 | struct spi_master *master; | ||
32 | |||
33 | void (*chipselect)(struct spi_device *spi, int is_on); | ||
34 | #define BITBANG_CS_ACTIVE 1 /* normally nCS, active low */ | ||
35 | #define BITBANG_CS_INACTIVE 0 | ||
36 | |||
37 | /* txrx_bufs() may handle dma mapping for transfers that don't | ||
38 | * already have one (transfer.{tx,rx}_dma is zero), or use PIO | ||
39 | */ | ||
40 | int (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t); | ||
41 | |||
42 | /* txrx_word[SPI_MODE_*]() just looks like a shift register */ | ||
43 | u32 (*txrx_word[4])(struct spi_device *spi, | ||
44 | unsigned nsecs, | ||
45 | u32 word, u8 bits); | ||
46 | }; | ||
47 | |||
48 | /* you can call these default bitbang->master methods from your custom | ||
49 | * methods, if you like. | ||
50 | */ | ||
51 | extern int spi_bitbang_setup(struct spi_device *spi); | ||
52 | extern void spi_bitbang_cleanup(const struct spi_device *spi); | ||
53 | extern int spi_bitbang_transfer(struct spi_device *spi, struct spi_message *m); | ||
54 | |||
55 | /* start or stop queue processing */ | ||
56 | extern int spi_bitbang_start(struct spi_bitbang *spi); | ||
57 | extern int spi_bitbang_stop(struct spi_bitbang *spi); | ||
58 | |||
59 | #endif /* __SPI_BITBANG_H */ | ||
60 | |||
61 | /*-------------------------------------------------------------------------*/ | ||
62 | |||
63 | #ifdef EXPAND_BITBANG_TXRX | ||
64 | |||
65 | /* | ||
66 | * The code that knows what GPIO pins do what should have declared four | ||
67 | * functions, ideally as inlines, before #defining EXPAND_BITBANG_TXRX | ||
68 | * and including this header: | ||
69 | * | ||
70 | * void setsck(struct spi_device *, int is_on); | ||
71 | * void setmosi(struct spi_device *, int is_on); | ||
72 | * int getmiso(struct spi_device *); | ||
73 | * void spidelay(unsigned); | ||
74 | * | ||
75 | * A non-inlined routine would call bitbang_txrx_*() routines. The | ||
76 | * main loop could easily compile down to a handful of instructions, | ||
77 | * especially if the delay is a NOP (to run at peak speed). | ||
78 | * | ||
79 | * Since this is software, the timings may not be exactly what your board's | ||
80 | * chips need ... there may be several reasons you'd need to tweak timings | ||
81 | * in these routines, not just make to make it faster or slower to match a | ||
82 | * particular CPU clock rate. | ||
83 | */ | ||
84 | |||
85 | static inline u32 | ||
86 | bitbang_txrx_be_cpha0(struct spi_device *spi, | ||
87 | unsigned nsecs, unsigned cpol, | ||
88 | u32 word, u8 bits) | ||
89 | { | ||
90 | /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ | ||
91 | |||
92 | /* clock starts at inactive polarity */ | ||
93 | for (word <<= (32 - bits); likely(bits); bits--) { | ||
94 | |||
95 | /* setup MSB (to slave) on trailing edge */ | ||
96 | setmosi(spi, word & (1 << 31)); | ||
97 | spidelay(nsecs); /* T(setup) */ | ||
98 | |||
99 | setsck(spi, !cpol); | ||
100 | spidelay(nsecs); | ||
101 | |||
102 | /* sample MSB (from slave) on leading edge */ | ||
103 | word <<= 1; | ||
104 | word |= getmiso(spi); | ||
105 | setsck(spi, cpol); | ||
106 | } | ||
107 | return word; | ||
108 | } | ||
109 | |||
110 | static inline u32 | ||
111 | bitbang_txrx_be_cpha1(struct spi_device *spi, | ||
112 | unsigned nsecs, unsigned cpol, | ||
113 | u32 word, u8 bits) | ||
114 | { | ||
115 | /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ | ||
116 | |||
117 | /* clock starts at inactive polarity */ | ||
118 | for (word <<= (32 - bits); likely(bits); bits--) { | ||
119 | |||
120 | /* setup MSB (to slave) on leading edge */ | ||
121 | setsck(spi, !cpol); | ||
122 | setmosi(spi, word & (1 << 31)); | ||
123 | spidelay(nsecs); /* T(setup) */ | ||
124 | |||
125 | setsck(spi, cpol); | ||
126 | spidelay(nsecs); | ||
127 | |||
128 | /* sample MSB (from slave) on trailing edge */ | ||
129 | word <<= 1; | ||
130 | word |= getmiso(spi); | ||
131 | } | ||
132 | return word; | ||
133 | } | ||
134 | |||
135 | #endif /* EXPAND_BITBANG_TXRX */ | ||
diff --git a/include/linux/swap.h b/include/linux/swap.h index 389d1c382e20..e92054d6530b 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -180,6 +180,11 @@ extern int isolate_lru_page(struct page *p); | |||
180 | extern int putback_lru_pages(struct list_head *l); | 180 | extern int putback_lru_pages(struct list_head *l); |
181 | extern int migrate_pages(struct list_head *l, struct list_head *t, | 181 | extern int migrate_pages(struct list_head *l, struct list_head *t, |
182 | struct list_head *moved, struct list_head *failed); | 182 | struct list_head *moved, struct list_head *failed); |
183 | #else | ||
184 | static inline int isolate_lru_page(struct page *p) { return -ENOSYS; } | ||
185 | static inline int putback_lru_pages(struct list_head *l) { return 0; } | ||
186 | static inline int migrate_pages(struct list_head *l, struct list_head *t, | ||
187 | struct list_head *moved, struct list_head *failed) { return -ENOSYS; } | ||
183 | #endif | 188 | #endif |
184 | 189 | ||
185 | #ifdef CONFIG_MMU | 190 | #ifdef CONFIG_MMU |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h new file mode 100644 index 000000000000..243a15f54002 --- /dev/null +++ b/include/linux/tipc.h | |||
@@ -0,0 +1,212 @@ | |||
1 | /* | ||
2 | * include/linux/tipc.h: Include file for TIPC socket interface | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _LINUX_TIPC_H_ | ||
38 | #define _LINUX_TIPC_H_ | ||
39 | |||
40 | #include <linux/types.h> | ||
41 | |||
42 | /* | ||
43 | * TIPC addressing primitives | ||
44 | */ | ||
45 | |||
46 | struct tipc_portid { | ||
47 | __u32 ref; | ||
48 | __u32 node; | ||
49 | }; | ||
50 | |||
51 | struct tipc_name { | ||
52 | __u32 type; | ||
53 | __u32 instance; | ||
54 | }; | ||
55 | |||
56 | struct tipc_name_seq { | ||
57 | __u32 type; | ||
58 | __u32 lower; | ||
59 | __u32 upper; | ||
60 | }; | ||
61 | |||
62 | static inline __u32 tipc_addr(unsigned int zone, | ||
63 | unsigned int cluster, | ||
64 | unsigned int node) | ||
65 | { | ||
66 | return (zone << 24) | (cluster << 12) | node; | ||
67 | } | ||
68 | |||
69 | static inline unsigned int tipc_zone(__u32 addr) | ||
70 | { | ||
71 | return addr >> 24; | ||
72 | } | ||
73 | |||
74 | static inline unsigned int tipc_cluster(__u32 addr) | ||
75 | { | ||
76 | return (addr >> 12) & 0xfff; | ||
77 | } | ||
78 | |||
79 | static inline unsigned int tipc_node(__u32 addr) | ||
80 | { | ||
81 | return addr & 0xfff; | ||
82 | } | ||
83 | |||
84 | /* | ||
85 | * Application-accessible port name types | ||
86 | */ | ||
87 | |||
88 | #define TIPC_CFG_SRV 0 /* configuration service name type */ | ||
89 | #define TIPC_TOP_SRV 1 /* topology service name type */ | ||
90 | #define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */ | ||
91 | |||
92 | /* | ||
93 | * Publication scopes when binding port names and port name sequences | ||
94 | */ | ||
95 | |||
96 | #define TIPC_ZONE_SCOPE 1 | ||
97 | #define TIPC_CLUSTER_SCOPE 2 | ||
98 | #define TIPC_NODE_SCOPE 3 | ||
99 | |||
100 | /* | ||
101 | * Limiting values for messages | ||
102 | */ | ||
103 | |||
104 | #define TIPC_MAX_USER_MSG_SIZE 66000 | ||
105 | |||
106 | /* | ||
107 | * Message importance levels | ||
108 | */ | ||
109 | |||
110 | #define TIPC_LOW_IMPORTANCE 0 /* default */ | ||
111 | #define TIPC_MEDIUM_IMPORTANCE 1 | ||
112 | #define TIPC_HIGH_IMPORTANCE 2 | ||
113 | #define TIPC_CRITICAL_IMPORTANCE 3 | ||
114 | |||
115 | /* | ||
116 | * Msg rejection/connection shutdown reasons | ||
117 | */ | ||
118 | |||
119 | #define TIPC_OK 0 | ||
120 | #define TIPC_ERR_NO_NAME 1 | ||
121 | #define TIPC_ERR_NO_PORT 2 | ||
122 | #define TIPC_ERR_NO_NODE 3 | ||
123 | #define TIPC_ERR_OVERLOAD 4 | ||
124 | #define TIPC_CONN_SHUTDOWN 5 | ||
125 | |||
126 | /* | ||
127 | * TIPC topology subscription service definitions | ||
128 | */ | ||
129 | |||
130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ | ||
131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ | ||
132 | #if 0 | ||
133 | /* The following filter options are not currently implemented */ | ||
134 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ | ||
135 | #define TIPC_SUB_NO_UNBIND_EVTS 0x08 /* filter out "withdraw" events */ | ||
136 | #define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */ | ||
137 | #endif | ||
138 | |||
139 | #define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ | ||
140 | |||
141 | struct tipc_subscr { | ||
142 | struct tipc_name_seq seq; /* name sequence of interest */ | ||
143 | __u32 timeout; /* subscription duration (in ms) */ | ||
144 | __u32 filter; /* bitmask of filter options */ | ||
145 | char usr_handle[8]; /* available for subscriber use */ | ||
146 | }; | ||
147 | |||
148 | #define TIPC_PUBLISHED 1 /* publication event */ | ||
149 | #define TIPC_WITHDRAWN 2 /* withdraw event */ | ||
150 | #define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ | ||
151 | |||
152 | struct tipc_event { | ||
153 | __u32 event; /* event type */ | ||
154 | __u32 found_lower; /* matching name seq instances */ | ||
155 | __u32 found_upper; /* " " " " */ | ||
156 | struct tipc_portid port; /* associated port */ | ||
157 | struct tipc_subscr s; /* associated subscription */ | ||
158 | }; | ||
159 | |||
160 | /* | ||
161 | * Socket API | ||
162 | */ | ||
163 | |||
164 | #ifndef AF_TIPC | ||
165 | #define AF_TIPC 30 | ||
166 | #endif | ||
167 | |||
168 | #ifndef PF_TIPC | ||
169 | #define PF_TIPC AF_TIPC | ||
170 | #endif | ||
171 | |||
172 | #ifndef SOL_TIPC | ||
173 | #define SOL_TIPC 271 | ||
174 | #endif | ||
175 | |||
176 | #define TIPC_ADDR_NAMESEQ 1 | ||
177 | #define TIPC_ADDR_MCAST 1 | ||
178 | #define TIPC_ADDR_NAME 2 | ||
179 | #define TIPC_ADDR_ID 3 | ||
180 | |||
181 | struct sockaddr_tipc { | ||
182 | unsigned short family; | ||
183 | unsigned char addrtype; | ||
184 | signed char scope; | ||
185 | union { | ||
186 | struct tipc_portid id; | ||
187 | struct tipc_name_seq nameseq; | ||
188 | struct { | ||
189 | struct tipc_name name; | ||
190 | __u32 domain; /* 0: own zone */ | ||
191 | } name; | ||
192 | } addr; | ||
193 | }; | ||
194 | |||
195 | /* | ||
196 | * Ancillary data objects supported by recvmsg() | ||
197 | */ | ||
198 | |||
199 | #define TIPC_ERRINFO 1 /* error info */ | ||
200 | #define TIPC_RETDATA 2 /* returned data */ | ||
201 | #define TIPC_DESTNAME 3 /* destination name */ | ||
202 | |||
203 | /* | ||
204 | * TIPC-specific socket option values | ||
205 | */ | ||
206 | |||
207 | #define TIPC_IMPORTANCE 127 /* Default: TIPC_LOW_IMPORTANCE */ | ||
208 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ | ||
209 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ | ||
210 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ | ||
211 | |||
212 | #endif | ||
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h new file mode 100644 index 000000000000..a52c8c64a5a3 --- /dev/null +++ b/include/linux/tipc_config.h | |||
@@ -0,0 +1,407 @@ | |||
1 | /* | ||
2 | * include/linux/tipc_config.h: Include file for TIPC configuration interface | ||
3 | * | ||
4 | * Copyright (c) 2003-2006, Ericsson AB | ||
5 | * Copyright (c) 2005, Wind River Systems | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions are met: | ||
10 | * | ||
11 | * 1. Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * 2. Redistributions in binary form must reproduce the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer in the | ||
15 | * documentation and/or other materials provided with the distribution. | ||
16 | * 3. Neither the names of the copyright holders nor the names of its | ||
17 | * contributors may be used to endorse or promote products derived from | ||
18 | * this software without specific prior written permission. | ||
19 | * | ||
20 | * Alternatively, this software may be distributed under the terms of the | ||
21 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
22 | * Software Foundation. | ||
23 | * | ||
24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | ||
28 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
30 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
31 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
32 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
33 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | |||
37 | #ifndef _LINUX_TIPC_CONFIG_H_ | ||
38 | #define _LINUX_TIPC_CONFIG_H_ | ||
39 | |||
40 | #include <linux/types.h> | ||
41 | #include <linux/string.h> | ||
42 | #include <asm/byteorder.h> | ||
43 | |||
44 | /* | ||
45 | * Configuration | ||
46 | * | ||
47 | * All configuration management messaging involves sending a request message | ||
48 | * to the TIPC configuration service on a node, which sends a reply message | ||
49 | * back. (In the future multi-message replies may be supported.) | ||
50 | * | ||
51 | * Both request and reply messages consist of a transport header and payload. | ||
52 | * The transport header contains info about the desired operation; | ||
53 | * the payload consists of zero or more type/length/value (TLV) items | ||
54 | * which specify parameters or results for the operation. | ||
55 | * | ||
56 | * For many operations, the request and reply messages have a fixed number | ||
57 | * of TLVs (usually zero or one); however, some reply messages may return | ||
58 | * a variable number of TLVs. A failed request is denoted by the presence | ||
59 | * of an "error string" TLV in the reply message instead of the TLV(s) the | ||
60 | * reply should contain if the request succeeds. | ||
61 | */ | ||
62 | |||
63 | /* | ||
64 | * Public commands: | ||
65 | * May be issued by any process. | ||
66 | * Accepted by own node, or by remote node only if remote management enabled. | ||
67 | */ | ||
68 | |||
69 | #define TIPC_CMD_NOOP 0x0000 /* tx none, rx none */ | ||
70 | #define TIPC_CMD_GET_NODES 0x0001 /* tx net_addr, rx node_info(s) */ | ||
71 | #define TIPC_CMD_GET_MEDIA_NAMES 0x0002 /* tx none, rx media_name(s) */ | ||
72 | #define TIPC_CMD_GET_BEARER_NAMES 0x0003 /* tx none, rx bearer_name(s) */ | ||
73 | #define TIPC_CMD_GET_LINKS 0x0004 /* tx net_addr, rx link_info(s) */ | ||
74 | #define TIPC_CMD_SHOW_NAME_TABLE 0x0005 /* tx name_tbl_query, rx ultra_string */ | ||
75 | #define TIPC_CMD_SHOW_PORTS 0x0006 /* tx none, rx ultra_string */ | ||
76 | #define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */ | ||
77 | |||
78 | #if 0 | ||
79 | #define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */ | ||
80 | #define TIPC_CMD_RESET_PORT_STATS 0x0009 /* tx port_ref, rx none */ | ||
81 | #define TIPC_CMD_GET_ROUTES 0x000A /* tx ?, rx ? */ | ||
82 | #define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */ | ||
83 | #endif | ||
84 | |||
85 | /* | ||
86 | * Protected commands: | ||
87 | * May only be issued by "network administration capable" process. | ||
88 | * Accepted by own node, or by remote node only if remote management enabled | ||
89 | * and this node is zone manager. | ||
90 | */ | ||
91 | |||
92 | #define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ | ||
93 | #define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ | ||
94 | #define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */ | ||
95 | #define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */ | ||
96 | #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* tx none, rx unsigned */ | ||
97 | #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* tx none, rx unsigned */ | ||
98 | #define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */ | ||
99 | #define TIPC_CMD_GET_MAX_SLAVES 0x400A /* tx none, rx unsigned */ | ||
100 | #define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */ | ||
101 | |||
102 | #define TIPC_CMD_ENABLE_BEARER 0x4101 /* tx bearer_config, rx none */ | ||
103 | #define TIPC_CMD_DISABLE_BEARER 0x4102 /* tx bearer_name, rx none */ | ||
104 | #define TIPC_CMD_SET_LINK_TOL 0x4107 /* tx link_config, rx none */ | ||
105 | #define TIPC_CMD_SET_LINK_PRI 0x4108 /* tx link_config, rx none */ | ||
106 | #define TIPC_CMD_SET_LINK_WINDOW 0x4109 /* tx link_config, rx none */ | ||
107 | #define TIPC_CMD_SET_LOG_SIZE 0x410A /* tx unsigned, rx none */ | ||
108 | #define TIPC_CMD_DUMP_LOG 0x410B /* tx none, rx ultra_string */ | ||
109 | #define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */ | ||
110 | |||
111 | #if 0 | ||
112 | #define TIPC_CMD_CREATE_LINK 0x4103 /* tx link_create, rx none */ | ||
113 | #define TIPC_CMD_REMOVE_LINK 0x4104 /* tx link_name, rx none */ | ||
114 | #define TIPC_CMD_BLOCK_LINK 0x4105 /* tx link_name, rx none */ | ||
115 | #define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */ | ||
116 | #endif | ||
117 | |||
118 | /* | ||
119 | * Private commands: | ||
120 | * May only be issued by "network administration capable" process. | ||
121 | * Accepted by own node only; cannot be used on a remote node. | ||
122 | */ | ||
123 | |||
124 | #define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ | ||
125 | #if 0 | ||
126 | #define TIPC_CMD_SET_ZONE_MASTER 0x8002 /* tx none, rx none */ | ||
127 | #endif | ||
128 | #define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */ | ||
129 | #define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ | ||
130 | #define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */ | ||
131 | #define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */ | ||
132 | #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* tx unsigned, rx none */ | ||
133 | #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* tx unsigned, rx none */ | ||
134 | #define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */ | ||
135 | #define TIPC_CMD_SET_MAX_SLAVES 0x800A /* tx unsigned, rx none */ | ||
136 | #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ | ||
137 | |||
138 | /* | ||
139 | * TLV types defined for TIPC | ||
140 | */ | ||
141 | |||
142 | #define TIPC_TLV_NONE 0 /* no TLV present */ | ||
143 | #define TIPC_TLV_VOID 1 /* empty TLV (0 data bytes)*/ | ||
144 | #define TIPC_TLV_UNSIGNED 2 /* 32-bit integer */ | ||
145 | #define TIPC_TLV_STRING 3 /* char[128] (max) */ | ||
146 | #define TIPC_TLV_LARGE_STRING 4 /* char[2048] (max) */ | ||
147 | #define TIPC_TLV_ULTRA_STRING 5 /* char[32768] (max) */ | ||
148 | |||
149 | #define TIPC_TLV_ERROR_STRING 16 /* char[128] containing "error code" */ | ||
150 | #define TIPC_TLV_NET_ADDR 17 /* 32-bit integer denoting <Z.C.N> */ | ||
151 | #define TIPC_TLV_MEDIA_NAME 18 /* char[TIPC_MAX_MEDIA_NAME] */ | ||
152 | #define TIPC_TLV_BEARER_NAME 19 /* char[TIPC_MAX_BEARER_NAME] */ | ||
153 | #define TIPC_TLV_LINK_NAME 20 /* char[TIPC_MAX_LINK_NAME] */ | ||
154 | #define TIPC_TLV_NODE_INFO 21 /* struct tipc_node_info */ | ||
155 | #define TIPC_TLV_LINK_INFO 22 /* struct tipc_link_info */ | ||
156 | #define TIPC_TLV_BEARER_CONFIG 23 /* struct tipc_bearer_config */ | ||
157 | #define TIPC_TLV_LINK_CONFIG 24 /* struct tipc_link_config */ | ||
158 | #define TIPC_TLV_NAME_TBL_QUERY 25 /* struct tipc_name_table_query */ | ||
159 | #define TIPC_TLV_PORT_REF 26 /* 32-bit port reference */ | ||
160 | |||
161 | /* | ||
162 | * Maximum sizes of TIPC bearer-related names (including terminating NUL) | ||
163 | */ | ||
164 | |||
165 | #define TIPC_MAX_MEDIA_NAME 16 /* format = media */ | ||
166 | #define TIPC_MAX_IF_NAME 16 /* format = interface */ | ||
167 | #define TIPC_MAX_BEARER_NAME 32 /* format = media:interface */ | ||
168 | #define TIPC_MAX_LINK_NAME 60 /* format = Z.C.N:interface-Z.C.N:interface */ | ||
169 | |||
170 | /* | ||
171 | * Link priority limits (range from 0 to # priorities - 1) | ||
172 | */ | ||
173 | |||
174 | #define TIPC_NUM_LINK_PRI 32 | ||
175 | |||
176 | /* | ||
177 | * Link tolerance limits (min, default, max), in ms | ||
178 | */ | ||
179 | |||
180 | #define TIPC_MIN_LINK_TOL 50 | ||
181 | #define TIPC_DEF_LINK_TOL 1500 | ||
182 | #define TIPC_MAX_LINK_TOL 30000 | ||
183 | |||
184 | /* | ||
185 | * Link window limits (min, default, max), in packets | ||
186 | */ | ||
187 | |||
188 | #define TIPC_MIN_LINK_WIN 16 | ||
189 | #define TIPC_DEF_LINK_WIN 50 | ||
190 | #define TIPC_MAX_LINK_WIN 150 | ||
191 | |||
192 | |||
193 | struct tipc_node_info { | ||
194 | __u32 addr; /* network address of node */ | ||
195 | __u32 up; /* 0=down, 1= up */ | ||
196 | }; | ||
197 | |||
198 | struct tipc_link_info { | ||
199 | __u32 dest; /* network address of peer node */ | ||
200 | __u32 up; /* 0=down, 1=up */ | ||
201 | char str[TIPC_MAX_LINK_NAME]; /* link name */ | ||
202 | }; | ||
203 | |||
204 | struct tipc_bearer_config { | ||
205 | __u32 priority; /* Range [1,31]. Override per link */ | ||
206 | __u32 detect_scope; | ||
207 | char name[TIPC_MAX_BEARER_NAME]; | ||
208 | }; | ||
209 | |||
210 | struct tipc_link_config { | ||
211 | __u32 value; | ||
212 | char name[TIPC_MAX_LINK_NAME]; | ||
213 | }; | ||
214 | |||
215 | #define TIPC_NTQ_ALLTYPES 0x80000000 | ||
216 | |||
217 | struct tipc_name_table_query { | ||
218 | __u32 depth; /* 1:type, 2:+name info, 3:+port info, 4+:+debug info */ | ||
219 | __u32 type; /* {t,l,u} info ignored if high bit of "depth" is set */ | ||
220 | __u32 lowbound; /* (i.e. displays all entries of name table) */ | ||
221 | __u32 upbound; | ||
222 | }; | ||
223 | |||
224 | /* | ||
225 | * The error string TLV is a null-terminated string describing the cause | ||
226 | * of the request failure. To simplify error processing (and to save space) | ||
227 | * the first character of the string can be a special error code character | ||
228 | * (lying by the range 0x80 to 0xFF) which represents a pre-defined reason. | ||
229 | */ | ||
230 | |||
231 | #define TIPC_CFG_TLV_ERROR "\x80" /* request contains incorrect TLV(s) */ | ||
232 | #define TIPC_CFG_NOT_NET_ADMIN "\x81" /* must be network administrator */ | ||
233 | #define TIPC_CFG_NOT_ZONE_MSTR "\x82" /* must be zone master */ | ||
234 | #define TIPC_CFG_NO_REMOTE "\x83" /* remote management not enabled */ | ||
235 | #define TIPC_CFG_NOT_SUPPORTED "\x84" /* request is not supported by TIPC */ | ||
236 | #define TIPC_CFG_INVALID_VALUE "\x85" /* request has invalid argument value */ | ||
237 | |||
238 | #if 0 | ||
239 | /* prototypes TLV structures for proposed commands */ | ||
240 | struct tipc_link_create { | ||
241 | __u32 domain; | ||
242 | struct tipc_media_addr peer_addr; | ||
243 | char bearer_name[TIPC_MAX_BEARER_NAME]; | ||
244 | }; | ||
245 | |||
246 | struct tipc_route_info { | ||
247 | __u32 dest; | ||
248 | __u32 router; | ||
249 | }; | ||
250 | #endif | ||
251 | |||
252 | /* | ||
253 | * A TLV consists of a descriptor, followed by the TLV value. | ||
254 | * TLV descriptor fields are stored in network byte order; | ||
255 | * TLV values must also be stored in network byte order (where applicable). | ||
256 | * TLV descriptors must be aligned to addresses which are multiple of 4, | ||
257 | * so up to 3 bytes of padding may exist at the end of the TLV value area. | ||
258 | * There must not be any padding between the TLV descriptor and its value. | ||
259 | */ | ||
260 | |||
261 | struct tlv_desc { | ||
262 | __u16 tlv_len; /* TLV length (descriptor + value) */ | ||
263 | __u16 tlv_type; /* TLV identifier */ | ||
264 | }; | ||
265 | |||
266 | #define TLV_ALIGNTO 4 | ||
267 | |||
268 | #define TLV_ALIGN(datalen) (((datalen)+(TLV_ALIGNTO-1)) & ~(TLV_ALIGNTO-1)) | ||
269 | #define TLV_LENGTH(datalen) (sizeof(struct tlv_desc) + (datalen)) | ||
270 | #define TLV_SPACE(datalen) (TLV_ALIGN(TLV_LENGTH(datalen))) | ||
271 | #define TLV_DATA(tlv) ((void *)((char *)(tlv) + TLV_LENGTH(0))) | ||
272 | |||
273 | static inline int TLV_OK(const void *tlv, __u16 space) | ||
274 | { | ||
275 | /* | ||
276 | * Would also like to check that "tlv" is a multiple of 4, | ||
277 | * but don't know how to do this in a portable way. | ||
278 | * - Tried doing (!(tlv & (TLV_ALIGNTO-1))), but GCC compiler | ||
279 | * won't allow binary "&" with a pointer. | ||
280 | * - Tried casting "tlv" to integer type, but causes warning about size | ||
281 | * mismatch when pointer is bigger than chosen type (int, long, ...). | ||
282 | */ | ||
283 | |||
284 | return (space >= TLV_SPACE(0)) && | ||
285 | (ntohs(((struct tlv_desc *)tlv)->tlv_len) <= space); | ||
286 | } | ||
287 | |||
288 | static inline int TLV_CHECK(const void *tlv, __u16 space, __u16 exp_type) | ||
289 | { | ||
290 | return TLV_OK(tlv, space) && | ||
291 | (ntohs(((struct tlv_desc *)tlv)->tlv_type) == exp_type); | ||
292 | } | ||
293 | |||
294 | static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len) | ||
295 | { | ||
296 | struct tlv_desc *tlv_ptr; | ||
297 | int tlv_len; | ||
298 | |||
299 | tlv_len = TLV_LENGTH(len); | ||
300 | tlv_ptr = (struct tlv_desc *)tlv; | ||
301 | tlv_ptr->tlv_type = htons(type); | ||
302 | tlv_ptr->tlv_len = htons(tlv_len); | ||
303 | if (len && data) | ||
304 | memcpy(TLV_DATA(tlv_ptr), data, tlv_len); | ||
305 | return TLV_SPACE(len); | ||
306 | } | ||
307 | |||
308 | /* | ||
309 | * A TLV list descriptor simplifies processing of messages | ||
310 | * containing multiple TLVs. | ||
311 | */ | ||
312 | |||
313 | struct tlv_list_desc { | ||
314 | struct tlv_desc *tlv_ptr; /* ptr to current TLV */ | ||
315 | __u32 tlv_space; /* # bytes from curr TLV to list end */ | ||
316 | }; | ||
317 | |||
318 | static inline void TLV_LIST_INIT(struct tlv_list_desc *list, | ||
319 | void *data, __u32 space) | ||
320 | { | ||
321 | list->tlv_ptr = (struct tlv_desc *)data; | ||
322 | list->tlv_space = space; | ||
323 | } | ||
324 | |||
325 | static inline int TLV_LIST_EMPTY(struct tlv_list_desc *list) | ||
326 | { | ||
327 | return (list->tlv_space == 0); | ||
328 | } | ||
329 | |||
330 | static inline int TLV_LIST_CHECK(struct tlv_list_desc *list, __u16 exp_type) | ||
331 | { | ||
332 | return TLV_CHECK(list->tlv_ptr, list->tlv_space, exp_type); | ||
333 | } | ||
334 | |||
335 | static inline void *TLV_LIST_DATA(struct tlv_list_desc *list) | ||
336 | { | ||
337 | return TLV_DATA(list->tlv_ptr); | ||
338 | } | ||
339 | |||
340 | static inline void TLV_LIST_STEP(struct tlv_list_desc *list) | ||
341 | { | ||
342 | __u16 tlv_space = TLV_ALIGN(ntohs(list->tlv_ptr->tlv_len)); | ||
343 | |||
344 | list->tlv_ptr = (struct tlv_desc *)((char *)list->tlv_ptr + tlv_space); | ||
345 | list->tlv_space -= tlv_space; | ||
346 | } | ||
347 | |||
348 | /* | ||
349 | * Configuration messages exchanged via NETLINK_GENERIC use the following | ||
350 | * family id, name, version and command. | ||
351 | */ | ||
352 | #define TIPC_GENL_NAME "TIPC" | ||
353 | #define TIPC_GENL_VERSION 0x1 | ||
354 | #define TIPC_GENL_CMD 0x1 | ||
355 | |||
356 | /* | ||
357 | * TIPC specific header used in NETLINK_GENERIC requests. | ||
358 | */ | ||
359 | struct tipc_genlmsghdr { | ||
360 | __u32 dest; /* Destination address */ | ||
361 | __u16 cmd; /* Command */ | ||
362 | __u16 reserved; /* Unused */ | ||
363 | }; | ||
364 | |||
365 | #define TIPC_GENL_HDRLEN NLMSG_ALIGN(sizeof(struct tipc_genlmsghdr)) | ||
366 | |||
367 | /* | ||
368 | * Configuration messages exchanged via TIPC sockets use the TIPC configuration | ||
369 | * message header, which is defined below. This structure is analogous | ||
370 | * to the Netlink message header, but fields are stored in network byte order | ||
371 | * and no padding is permitted between the header and the message data | ||
372 | * that follows. | ||
373 | */ | ||
374 | |||
375 | struct tipc_cfg_msg_hdr | ||
376 | { | ||
377 | __u32 tcm_len; /* Message length (including header) */ | ||
378 | __u16 tcm_type; /* Command type */ | ||
379 | __u16 tcm_flags; /* Additional flags */ | ||
380 | char tcm_reserved[8]; /* Unused */ | ||
381 | }; | ||
382 | |||
383 | #define TCM_F_REQUEST 0x1 /* Flag: Request message */ | ||
384 | #define TCM_F_MORE 0x2 /* Flag: Message to be continued */ | ||
385 | |||
386 | #define TCM_ALIGN(datalen) (((datalen)+3) & ~3) | ||
387 | #define TCM_LENGTH(datalen) (sizeof(struct tipc_cfg_msg_hdr) + datalen) | ||
388 | #define TCM_SPACE(datalen) (TCM_ALIGN(TCM_LENGTH(datalen))) | ||
389 | #define TCM_DATA(tcm_hdr) ((void *)((char *)(tcm_hdr) + TCM_LENGTH(0))) | ||
390 | |||
391 | static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags, | ||
392 | void *data, __u16 data_len) | ||
393 | { | ||
394 | struct tipc_cfg_msg_hdr *tcm_hdr; | ||
395 | int msg_len; | ||
396 | |||
397 | msg_len = TCM_LENGTH(data_len); | ||
398 | tcm_hdr = (struct tipc_cfg_msg_hdr *)msg; | ||
399 | tcm_hdr->tcm_len = htonl(msg_len); | ||
400 | tcm_hdr->tcm_type = htons(cmd); | ||
401 | tcm_hdr->tcm_flags = htons(flags); | ||
402 | if (data_len && data) | ||
403 | memcpy(TCM_DATA(msg), data, data_len); | ||
404 | return TCM_SPACE(data_len); | ||
405 | } | ||
406 | |||
407 | #endif | ||