00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef PROTOSW_H_
00012 #define PROTOSW_H_
00013
00014 typedef int (*t_pr_attach)(struct s_socket *so);
00015 typedef int (*t_pr_detach)(struct s_socket *so);
00016 typedef int (*t_pr_bind)(struct s_socket *so,
00017 struct sockaddr *sa,
00018 socklen_t salen);
00019 typedef int (*t_pr_connect)(struct s_socket *so,
00020 struct sockaddr *sa,
00021 socklen_t salen);
00022 typedef int (*t_pr_send)(struct s_socket *so,
00023 struct s_data_buf *data,
00024 size_t data_size,
00025 struct sockaddr *sa,
00026 socklen_t salen);
00027 typedef size_t (*t_pr_recv)(struct s_socket *so,
00028 pid_t pid,
00029 struct sockaddr *sa,
00030 socklen_t *salen,
00031 vaddr_t uaddr,
00032 size_t usize);
00033
00034 typedef int (*t_pr_listen)(struct s_socket *so,
00035 int backlog);
00036 typedef int (*t_pr_accept)(struct s_socket *so,
00037 struct sockaddr *sa,
00038 socklen_t *salen,
00039 void **new_pcb);
00040
00041 typedef int (*t_pr_getpeername)(struct s_socket *so,
00042 struct sockaddr *sa,
00043 socklen_t *salen);
00044 typedef int (*t_pr_getsockname)(struct s_socket *so,
00045 struct sockaddr *sa,
00046 socklen_t *salen);
00047
00048 typedef int (*t_pr_poll)(struct s_socket *so,
00049 t_pollrec *pollrec);
00050
00051 struct s_protosw {
00052 int pr_type;
00053 int pr_protocol;
00054
00055 t_pr_attach pr_attach;
00056 t_pr_detach pr_detach;
00057 t_pr_bind pr_bind;
00058 t_pr_connect pr_connect;
00059 t_pr_send pr_send;
00060 t_pr_recv pr_recv;
00061
00062 t_pr_listen pr_listen;
00063 t_pr_accept pr_accept;
00064
00065 t_pr_getsockname pr_getsockname;
00066 t_pr_getpeername pr_getpeername;
00067
00068 t_pr_poll pr_poll;
00069 };
00070
00071 #define INETSW_SIZE 1
00072
00073 extern const struct s_protosw inetsw[];
00074
00075
00076 const struct s_protosw *find_in_proto(int type, int protocol);
00077
00078 #endif