All pastes #1741403 Raw Edit

xtreemos

public text v1 · immutable
#1741403 ·published 2010-01-07 14:07 UTC
rendered paste body
--- dserver-0.1/tcpcp3/src/libtcpcp/tcpcp.h	2009-12-15 14:17:57.000000000 +0100+++ /usr/src/kernel-xos-2.6.27.24-4xos/include/linux/tcpcp.h	2010-01-07 15:03:00.000000000 +0100@@ -1,79 +1,55 @@ /*- * tcpcp.h - TCP connection passing library high-level API- *- * This library is free software: you can redistribute it and/or- * modify it under the terms of the GNU Lesser General Public License- * as published by the Free Software Foundation, either version 3 of- * the License, or (at your option) any later version.- *- * This library is distributed in the hope that it will be useful, but- * WITHOUT ANY WARRANTY; without even the implied warranty of- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU- * Lesser General Public License for more details.- *- * You should have received a copy of the GNU Lesser General Public- * License along with this program.  If not, see- * <http://www.gnu.org/licenses/>.+ * linux/tcpcp.h - TCP connection passing, data structures and prototypes  *  * Written 2002 by Werner Almesberger- * Distributed under the LGPL.  *- * Copyright (C) 2005-2006 NTT Corporation- * Portions Copyright (C) Vrije Universiteit, Amsterdam. 2009.+ * Copyright (C) 2005 NTT Corporation  */ +#ifndef _LINUX_TCPCP_H+#define _LINUX_TCPCP_H -#ifndef TCPCP_H-#define TCPCP_H--#include <stdint.h>-#include <netinet/in.h>+#include <linux/unistd.h> -#ifdef __cplusplus-extern "C" {+#ifdef __KERNEL__+#include <linux/types.h>+#include <linux/in.h>+#include <linux/in6.h>+#include <linux/tcp.h>++#ifdef CONFIG_TCPCP_DEBUG+#define TCPCP_DPRINTK(fmt, args...) printk(KERN_DEBUG "TCPCP3: %s: " fmt, __func__, ## args)+#else+#define TCPCP_DPRINTK(fmt, args...) #endif -#define TCPCP_RET_OK	0-#define TCPCP_RET_NG	-1--#define TCPCP_EXEC_ONE	0-#define TCPCP_EXEC_ALL	1--enum tcpcp_sockopt {-	TCPCP_MAKE_SI		= 16,-	TCPCP_MAKE_SI_ALL,-	TCPCP_GET_SI,-	TCPCP_STOP,-	TCPCP_STOP_ALL,-	TCPCP_CLOSE,-	TCPCP_CLOSE_ALL,-	TCPCP_SET_SI,-	TCPCP_SET_SI_ALL,-	TCPCP_START,-	TCPCP_START_ALL,-	TCPCP_GET_RES_SIZE,-	TCPCP_GET_RES,-}; -/* ----- FD Result (FDR) Information (only "ALL") -------------------------- */+#define TCPCP_MODULE_NAME	"tcpcp" -struct tcpcp_fdr {-	int fd;-	int result;-};+#define	TCPCP_FLAG_MAKE_SI	0x01+#define	TCPCP_FLAG_STOP		0x02+#define	TCPCP_FLAG_CLOSE	0x04+#define	TCPCP_FLAG_SET_SI	0x08+#define	TCPCP_FLAG_START	0x10+#define TCPCP_FLAG_FLUSH        0x20+#define	TCPCP_FLAG_ALL		0x80 -struct result_list {-	unsigned int fd_all;	/* total of fd that succeeds in processing */-	unsigned int fd_ng;	/* Number of fd that fails in processing */-	struct tcpcp_fdr fdrs[0];	/* processing result pointer */-};+#define plugin_dummy() __asm__ __volatile__("nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t" \+	"nop\n\t") -struct result {-	unsigned int fd_all;    /* total of fd that succeeds in processing */-	unsigned int fd_ng;     /* Number of fd that fails in processing */-	unsigned int buf_size;-	unsigned int fdrs_size;-};+#endif /* __KERNEL__ */  /* ----- TCP Socket Informations (TCP-SIs) --------------------------------- */ @@ -89,8 +65,8 @@ 	uint8_t flags;		/* TCP header flags */ 	uint8_t sacked;		/* state flags for SACK/FACK */ 	uint8_t __pad2[2];-	uint16_t tso_segs;-	uint16_t tso_size;+	uint16_t gso_segs;+	uint16_t gso_size; 	uint32_t seq;		/* sequence number of first byte */ 	uint8_t data[0];        /* data, padded to multiple of 4 bytes */ };@@ -104,8 +80,8 @@  * TCP-SI element: globally unique TCP connection ID  **/ struct tcpcp_sie_id4 {-	uint32_t ip_src;	/* source IPv4 address */-	uint32_t ip_dst;	/* destination IPv4 address */+	struct in_addr ip_src;	/* source IPv4 address */+	struct in_addr ip_dst;	/* destination IPv4 address */ };  struct tcpcp_sie_id6 {@@ -278,12 +254,11 @@ 	struct tcpcp_si_hdr si_hdr[0]; }; -/* ------------------------------------------------------------------------- */ -/* Convenience macros for tcpcp header fields. They do not cast the- * argument to a struct tcpcp_si_hdr so that the compiler can check the- * types! - */+ /**+  * Convenience macros going from tcpcp_total_si_hdr (i.e., user+  * interface object) to specific members.+  */ #define tcpcp_hdr_ip6_src(__b) ((__b)->si_hdr->id.ip.v6.ip_src) #define tcpcp_hdr_ip6_dst(__b) ((__b)->si_hdr->id.ip.v6.ip_dst) #define tcpcp_hdr_ip4_src(__b) ((__b)->si_hdr->id.ip.v4.ip_src)@@ -295,38 +270,233 @@ #define tcpcp_hdr_var_snd_wnd(__b) ((__b)->si_hdr->vargen.snd_wnd) #define tcpcp_hdr_var_ts_gen(__b) ((__b)->si_hdr->vargen.ts_gen) #define tcpcp_hdr_var_ts_recent(__b) ((__b)->si_hdr->vargen.ts_recent)-#define tcpcp_hdr_isvalid(__b)                               \-  ( (sizeof(struct tcpcp_si_hdr) <=  (__b)->total_si_length) \-    && (1 <= (__b)->si_cnt) )+++/* ----- FD Result (FDR) Information (only "ALL") -------------------------- */++struct fdr {+	int fd;+	int result;+};++struct result_list {+  unsigned int fd_all;    /* total of fd that succeeds in processing */+  unsigned int fd_ng;     /* Number of fd that fails in processing */+  struct fdr fdrs[0];     /* processing result pointer */+};++struct result {+	unsigned int fd_all;    /* total of fd that succeeds in processing */+	unsigned int fd_ng;     /* Number of fd that fails in processing */+	unsigned int buf_size;+	unsigned int fdrs_size;+};+++/* ---- Process, Request, TCP-SIs and FDR Info. Entry ---------------------- */++#ifdef __KERNEL__++/**+ * TCP-SI buffer (It's used at setting TCP-SI)+ **/+struct tcpcp_si_skb_buf {+	unsigned int max_buf_len;+	unsigned int buf_len;+	unsigned int skb_cnt;+	char *si_skb;+};++struct tcpcp_si_buf {+	struct tcpcp_si_hdr si_hdr;	/* TCP-SI header */+	struct tcpcp_si_skb_buf snd_buf;+	struct tcpcp_si_skb_buf rcv_buf;+};++#define TCPCP_PAGE_NUM_SET_SI	24+#define TCPCP_SI_SKB_BUF_SIZE		PAGE_SIZE * TCPCP_PAGE_NUM_SET_SI++/**+ * common entry (It's used at making TCP-SIs or FDR Info.)+ **/+struct tcpcp_com_entry {+	struct tcpcp_com_entry *next;	/* next entry */+	unsigned int max_data_len;+	unsigned int data_len;		/* length of data */+	char data[0];+};++#define TCPCP_PAGE_NUM_MAKE_SI_ONE  3+#define TCPCP_COM_ENTRY_SIZE_FOR_ONE	PAGE_SIZE * TCPCP_PAGE_NUM_MAKE_SI_ONE+#define TCPCP_COM_ENTRY_SIZE_FOR_ALL	(PAGE_SIZE << 5) /* MAX_GFP_ORDER */++/**+ * Request Entry+ **/+struct tcpcp_req_entry {+	struct list_head node;+	struct list_head timer_node;+	uint32_t fd;+	struct sock *sk;+	pid_t pid;+	unsigned char flag;+	char dummy[3];+	unsigned int timeout;+	struct result res;+	struct tcpcp_com_entry *s_entry;	/* TCP-SIs Entry */+	struct tcpcp_com_entry *f_entry;	/* FDR Entry (only "ALL") */+	struct tcpcp_proc_entry *p_entry;	/* parent Process Entry */+};++#define TCPCP_WATCH_INTERVAL    	HZ+#define TCPCP_RETRY_WATCH_INTERVAL	TCPCP_WATCH_INTERVAL / 10+#define TCPCP_REQ_ENTRY_TIMEOUT		HZ * 10++/**+ * Process Entry+ **/+struct tcpcp_proc_entry {+	struct list_head node;+	gid_t tgid;+	unsigned char flag;+	char dummy[3];+	struct list_head r_list_head;	/* Request List */+};++/**+ * Process List or Timeout List+ **/+struct tcpcp_list {+	struct list_head head;+	rwlock_t lock;+};+#endif /* __KERNEL__ */+++/* ---- -------------------------------------------------------------------- */++#define TCPCP_RET_OK  0+#define TCPCP_RET_NG -1++#define TCPCP_EXEC_ONE 0+#define TCPCP_EXEC_ALL 1++#define TCPCP_SET_FLAG_OFF 0+#define TCPCP_SET_FLAG_ON  1  int tcpcp_get_si(int fd, int flag, void **bufptr, unsigned int *size,-		 struct result_list **reslst);+                 struct result_list **reslst); int tcpcp_stop(int fd, int flag, struct result_list **reslst); int tcpcp_close(int fd, struct result_list **reslst); int tcpcp_set_si(int fd, int flag, void *bufptr, unsigned int size,-		 struct result_list **reslst);+                 struct result_list **reslst); int tcpcp_start(int fd, int flag, struct result_list **reslst);-  int tcpcp_flush(int fd, struct timespec *timeout);-void tcpcp_free_results(struct result_list *reslst);-void tcpcp_free_si(void *bufptr, unsigned int size);+int tcpcp_flush(int fd, struct timespec *timeout); -#define plugin_dummy() __asm__ __volatile__("nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t" \-	"nop\n\t") +/*+ * Buffers are in sequence, first all send, then all out-of-order buffers.+ * Buffers must not overlap, and may not contain any extraneous data (e.g.+ * ack'ed bytes, or such). snd_nxt does not have to be at a buffer boundary.+ */+++#ifdef __KERNEL__++#if defined(CONFIG_TCPCP) || defined(CONFIG_TCPCP_MODULE) -#ifdef __cplusplus-  }+#include <linux/tcp.h>+#include <linux/time.h>+#include <net/sock.h>+#include <net/tcp.h>++typedef struct tcpcp_config_st {+   /**+    * Hooks+    **/+  int (*tcpcp_com_ope_hook)(struct sock *sk, int optname,+                            struct result *user_res);+  int (*tcpcp_get_si_hook)(struct sock *sk,+                           struct tcpcp_total_si_hdr *user_si,+                           unsigned int *user_size);+  int (*tcpcp_get_res_hook)(struct sock *sk, struct fdr *user_fdrs,+                            unsigned int *user_size);+  int (*tcpcp_set_si_hook)(struct sock *sk, int optname,+                           const struct tcpcp_total_si_hdr *user_si,+                           unsigned int size);+  void (*tcpcp_close_hook)(struct sock *sk);++  int (*tcpcp_flush_hook)(struct sock *sk, struct timespec *user_timeout);++   /**+    * Socket operations+    **/+#ifdef CONFIG_TCP_MD5SIG+  struct tcp_sock_af_ops tcpcp_sock_ipv4_specific;+  const struct tcp_sock_af_ops *orig_sock_ipv4_specific_ptr;+#endif /* CONFIG_TCP_MD5SIG */+  struct inet_connection_sock_af_ops tcpcp_ipv4_specific;+  const struct inet_connection_sock_af_ops *orig_ipv4_specific_ptr;+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)+  struct inet_connection_sock_af_ops tcpcp_ipv6_specific;+  struct inet_connection_sock_af_ops tcpcp_ipv6_mapped;+  const struct inet_connection_sock_af_ops *orig_ipv6_specific_ptr;+  const struct inet_connection_sock_af_ops *orig_ipv6_mapped_ptr;+#ifdef CONFIG_TCP_MD5SIG+  struct tcp_sock_af_ops tcpcp_sock_ipv6_mapped_specific;+  const struct tcp_sock_af_ops *orig_sock_ipv6_mapped_specific_ptr;+  struct tcp_sock_af_ops tcpcp_sock_ipv6_specific;+  const struct tcp_sock_af_ops *orig_sock_ipv6_specific_ptr;+#endif /* CONFIG_TCP_MD5SIG */+#endif /* CONFIG_IPV6 || CONFIG_IPV6_MODULE */+} tcpcp_config_t;++/* timeout of polling for tcpcp_flush() */+#define TCPCP_FLUSH_POLL_TIMEOUT_USECS 100++ /**+  * Get access to global tcpcp config options+  */+tcpcp_config_t *tcpcp_get_config(void);++ /* Initialize IPv4 settings */+void tcpcp_v4_init(void);+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)+ /* Initialize IPv6 settings */+void tcpcp_v6_init(void); #endif -#endif /* TCPCP_H */+extern struct sk_filter drop_all;++int tcpcp_discard_xmit(struct sk_buff *skb, int ipfragok);+void tcpcp_fix_seq(struct sock *sk, __u32 seq, __u32 ackseq);+void tcpcp_fix_ts(struct sock *sk, __u32 ack_tsecr);++/**+ * Hook call functions + **/+int tcpcp_call_com_ope_hook(struct sock *sk, int optname,+			    struct result *user_res);+int tcpcp_call_set_si_hook(struct sock *sk, int optname,+			   const struct tcpcp_total_si_hdr *user_si,+			   unsigned int size);+int tcpcp_call_get_si_hook(struct sock *sk, struct tcpcp_total_si_hdr *user_si,+			   unsigned int *user_size);+int tcpcp_call_get_res_hook(struct sock *sk, struct fdr *user_fdrs,+			    unsigned int *user_size);+void tcpcp_call_close_hook(struct sock *sk);+int tcpcp_call_flush_hook(struct sock *sk, struct timespec *user_timeout);++#else /* defined(CONFIG_TCPCP) || defined(CONFIG_TCPCP_MODULE) */++#define tcpcp_call_com_ope_hook(sk, optname, val) (-ENOPROTOOPT)+#define tcpcp_call_set_si_hook(sk, optname, val, size) (-ENOPROTOOPT)+#define tcpcp_call_get_si_hook(sk, val, size) (-ENOPROTOOPT)+#define tcpcp_call_get_res_hook(sk, val, size) (-ENOPROTOOPT)+#define tcpcp_call_close_hook(sk) (-ENOPROTOOPT)+#define tcpcp_call_flush_hook(sk, val) (-ENOPROTOOPT)++#endif /* !defined(CONFIG_TCPCP) && !defined(CONFIG_TCPCP_MODULE) */++#endif /* __KERNEL__ */++#endif /* _LINUX_TCPCP_H */