Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/protosw.h
Show First 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | |||||
* Thereafter it is called every 200ms through the pr_fasttimo entry and | * Thereafter it is called every 200ms through the pr_fasttimo entry and | ||||
* every 500ms through the pr_slowtimo for timer based actions. | * every 500ms through the pr_slowtimo for timer based actions. | ||||
* The system will call the pr_drain entry if it is low on space and | * The system will call the pr_drain entry if it is low on space and | ||||
* this should throw away any non-critical data. | * this should throw away any non-critical data. | ||||
* | * | ||||
* In retrospect, it would be a lot nicer to use an interface | * In retrospect, it would be a lot nicer to use an interface | ||||
* similar to the vnode VOP interface. | * similar to the vnode VOP interface. | ||||
*/ | */ | ||||
struct ifnet; | |||||
struct stat; | |||||
struct ucred; | |||||
struct uio; | |||||
/* USE THESE FOR YOUR PROTOTYPES ! */ | /* USE THESE FOR YOUR PROTOTYPES ! */ | ||||
typedef int pr_input_t (struct mbuf **, int*, int); | typedef int pr_input_t(struct mbuf **, int*, int); | ||||
typedef void pr_ctlinput_t (int, struct sockaddr *, void *); | typedef void pr_ctlinput_t(int, struct sockaddr *, void *); | ||||
typedef int pr_ctloutput_t (struct socket *, struct sockopt *); | typedef int pr_ctloutput_t(struct socket *, struct sockopt *); | ||||
typedef void pr_fasttimo_t (void); | typedef void pr_fasttimo_t(void); | ||||
typedef void pr_slowtimo_t (void); | typedef void pr_slowtimo_t(void); | ||||
typedef void pr_drain_t (void); | typedef void pr_drain_t(void); | ||||
typedef void pr_abort_t(struct socket *); | |||||
typedef int pr_accept_t(struct socket *, struct sockaddr **); | |||||
typedef int pr_attach_t(struct socket *, int, struct thread *); | |||||
typedef int pr_bind_t(struct socket *, struct sockaddr *, struct thread *); | |||||
typedef int pr_connect_t(struct socket *, struct sockaddr *, | |||||
struct thread *); | |||||
typedef int pr_connect2_t(struct socket *, struct socket *); | |||||
typedef int pr_control_t(struct socket *, u_long, caddr_t, struct ifnet *, | |||||
struct thread *); | |||||
typedef void pr_detach_t(struct socket *); | |||||
typedef int pr_disconnect_t(struct socket *); | |||||
typedef int pr_listen_t(struct socket *, int, struct thread *); | |||||
typedef int pr_peeraddr_t(struct socket *, struct sockaddr **); | |||||
typedef int pr_rcvd_t(struct socket *, int); | |||||
typedef int pr_rcvoob_t(struct socket *, struct mbuf *, int); | |||||
typedef enum { | |||||
PRUS_OOB = 0x1, | |||||
PRUS_EOF = 0x2, | |||||
PRUS_MORETOCOME = 0x4, | |||||
PRUS_NOTREADY = 0x8, | |||||
PRUS_IPV6 = 0x10, | |||||
} pr_send_flags_t; | |||||
typedef int pr_send_t(struct socket *, int, struct mbuf *, | |||||
struct sockaddr *, struct mbuf *, struct thread *); | |||||
typedef int pr_ready_t(struct socket *, struct mbuf *, int); | |||||
typedef int pr_sense_t(struct socket *, struct stat *); | |||||
typedef int pr_shutdown_t(struct socket *); | |||||
typedef int pr_flush_t(struct socket *, int); | |||||
typedef int pr_sockaddr_t(struct socket *, struct sockaddr **); | |||||
typedef int pr_sosend_t(struct socket *, struct sockaddr *, struct uio *, | |||||
struct mbuf *, struct mbuf *, int, struct thread *); | |||||
typedef int pr_soreceive_t(struct socket *, struct sockaddr **, | |||||
struct uio *, struct mbuf **, struct mbuf **, int *); | |||||
typedef int pr_sopoll_t(struct socket *, int, struct ucred *, | |||||
struct thread *); | |||||
typedef void pr_sosetlabel_t(struct socket *); | |||||
typedef void pr_close_t(struct socket *); | |||||
typedef int pr_bindat_t(int, struct socket *, struct sockaddr *, | |||||
struct thread *); | |||||
typedef int pr_connectat_t(int, struct socket *, struct sockaddr *, | |||||
struct thread *); | |||||
typedef int pr_aio_queue_t(struct socket *, struct kaiocb *); | |||||
struct protosw { | struct protosw { | ||||
short pr_type; /* socket type used for */ | short pr_type; /* socket type used for */ | ||||
struct domain *pr_domain; /* domain protocol a member of */ | struct domain *pr_domain; /* domain protocol a member of */ | ||||
short pr_protocol; /* protocol number */ | short pr_protocol; /* protocol number */ | ||||
short pr_flags; /* see below */ | short pr_flags; /* see below */ | ||||
/* protocol-protocol hooks */ | /* protocol-protocol hooks */ | ||||
pr_input_t *pr_input; /* input to protocol (from below) */ | pr_input_t *pr_input; /* input to protocol (from below) */ | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* If the ordering here looks odd, that's because it's alphabetical. These | * If the ordering here looks odd, that's because it's alphabetical. These | ||||
* should eventually be merged back into struct protosw. | * should eventually be merged back into struct protosw. | ||||
* | * | ||||
* Some fields initialized to defaults if they are NULL. | * Some fields initialized to defaults if they are NULL. | ||||
*/ | */ | ||||
struct pr_usrreqs { | struct pr_usrreqs { | ||||
void (*pru_abort)(struct socket *so); | pr_abort_t *pru_abort; | ||||
int (*pru_accept)(struct socket *so, struct sockaddr **nam); | pr_accept_t *pru_accept; | ||||
int (*pru_attach)(struct socket *so, int proto, struct thread *td); | pr_attach_t *pru_attach; | ||||
int (*pru_bind)(struct socket *so, struct sockaddr *nam, | pr_bind_t *pru_bind; | ||||
struct thread *td); | pr_connect_t *pru_connect; | ||||
int (*pru_connect)(struct socket *so, struct sockaddr *nam, | pr_connect2_t *pru_connect2; | ||||
struct thread *td); | pr_control_t *pru_control; | ||||
int (*pru_connect2)(struct socket *so1, struct socket *so2); | pr_detach_t *pru_detach; | ||||
int (*pru_control)(struct socket *so, u_long cmd, caddr_t data, | pr_disconnect_t *pru_disconnect; | ||||
struct ifnet *ifp, struct thread *td); | pr_listen_t *pru_listen; | ||||
void (*pru_detach)(struct socket *so); | pr_peeraddr_t *pru_peeraddr; | ||||
int (*pru_disconnect)(struct socket *so); | pr_rcvd_t *pru_rcvd; | ||||
int (*pru_listen)(struct socket *so, int backlog, | pr_rcvoob_t *pru_rcvoob; | ||||
struct thread *td); | pr_send_t *pru_send; | ||||
int (*pru_peeraddr)(struct socket *so, struct sockaddr **nam); | pr_ready_t *pru_ready; | ||||
int (*pru_rcvd)(struct socket *so, int flags); | pr_sense_t *pru_sense; | ||||
int (*pru_rcvoob)(struct socket *so, struct mbuf *m, int flags); | pr_shutdown_t *pru_shutdown; | ||||
int (*pru_send)(struct socket *so, int flags, struct mbuf *m, | pr_flush_t *pru_flush; | ||||
struct sockaddr *addr, struct mbuf *control, | pr_sockaddr_t *pru_sockaddr; | ||||
struct thread *td); | pr_sosend_t *pru_sosend; | ||||
#define PRUS_OOB 0x1 | pr_soreceive_t *pru_soreceive; | ||||
#define PRUS_EOF 0x2 | pr_sopoll_t *pru_sopoll; | ||||
#define PRUS_MORETOCOME 0x4 | pr_sosetlabel_t *pru_sosetlabel; | ||||
#define PRUS_NOTREADY 0x8 | pr_close_t *pru_close; | ||||
#define PRUS_IPV6 0x10 | pr_bindat_t *pru_bindat; | ||||
int (*pru_ready)(struct socket *so, struct mbuf *m, int count); | pr_connectat_t *pru_connectat; | ||||
int (*pru_sense)(struct socket *so, struct stat *sb); | pr_aio_queue_t *pru_aio_queue; | ||||
int (*pru_shutdown)(struct socket *so); | |||||
int (*pru_flush)(struct socket *so, int direction); | |||||
int (*pru_sockaddr)(struct socket *so, struct sockaddr **nam); | |||||
int (*pru_sosend)(struct socket *so, struct sockaddr *addr, | |||||
struct uio *uio, struct mbuf *top, struct mbuf *control, | |||||
int flags, struct thread *td); | |||||
int (*pru_soreceive)(struct socket *so, struct sockaddr **paddr, | |||||
struct uio *uio, struct mbuf **mp0, struct mbuf **controlp, | |||||
int *flagsp); | |||||
int (*pru_sopoll)(struct socket *so, int events, | |||||
struct ucred *cred, struct thread *td); | |||||
void (*pru_sosetlabel)(struct socket *so); | |||||
void (*pru_close)(struct socket *so); | |||||
int (*pru_bindat)(int fd, struct socket *so, struct sockaddr *nam, | |||||
struct thread *td); | |||||
int (*pru_connectat)(int fd, struct socket *so, | |||||
struct sockaddr *nam, struct thread *td); | |||||
int (*pru_aio_queue)(struct socket *so, struct kaiocb *job); | |||||
}; | }; | ||||
/* | /* | ||||
* All nonvoid pru_*() functions below return EOPNOTSUPP. | * All nonvoid pru_*() functions below return EOPNOTSUPP. | ||||
*/ | */ | ||||
int pru_accept_notsupp(struct socket *so, struct sockaddr **nam); | int pru_accept_notsupp(struct socket *so, struct sockaddr **nam); | ||||
int pru_aio_queue_notsupp(struct socket *so, struct kaiocb *job); | int pru_aio_queue_notsupp(struct socket *so, struct kaiocb *job); | ||||
int pru_attach_notsupp(struct socket *so, int proto, struct thread *td); | int pru_attach_notsupp(struct socket *so, int proto, struct thread *td); | ||||
▲ Show 20 Lines • Show All 110 Lines • Show Last 20 Lines |