Changeset View
Changeset View
Standalone View
Standalone View
sys/netipsec/keysock.c
Show First 20 Lines • Show All 135 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
/* | /* | ||||
* send message to the socket. | * send message to the socket. | ||||
*/ | */ | ||||
static int | static int | ||||
key_sendup0(struct rawcb *rp, struct mbuf *m, int promisc) | key_sendup0(struct rawcb *rp, struct mbuf *m, int promisc) | ||||
{ | { | ||||
int error; | |||||
if (promisc) { | if (promisc) { | ||||
struct sadb_msg *pmsg; | struct sadb_msg *pmsg; | ||||
M_PREPEND(m, sizeof(struct sadb_msg), M_NOWAIT); | M_PREPEND(m, sizeof(struct sadb_msg), M_NOWAIT); | ||||
if (m == NULL) { | if (m == NULL) { | ||||
PFKEYSTAT_INC(in_nomem); | PFKEYSTAT_INC(in_nomem); | ||||
return (ENOBUFS); | return (ENOBUFS); | ||||
} | } | ||||
pmsg = mtod(m, struct sadb_msg *); | pmsg = mtod(m, struct sadb_msg *); | ||||
bzero(pmsg, sizeof(*pmsg)); | bzero(pmsg, sizeof(*pmsg)); | ||||
pmsg->sadb_msg_version = PF_KEY_V2; | pmsg->sadb_msg_version = PF_KEY_V2; | ||||
pmsg->sadb_msg_type = SADB_X_PROMISC; | pmsg->sadb_msg_type = SADB_X_PROMISC; | ||||
pmsg->sadb_msg_len = PFKEY_UNIT64(m->m_pkthdr.len); | pmsg->sadb_msg_len = PFKEY_UNIT64(m->m_pkthdr.len); | ||||
/* pid and seq? */ | /* pid and seq? */ | ||||
PFKEYSTAT_INC(in_msgtype[pmsg->sadb_msg_type]); | PFKEYSTAT_INC(in_msgtype[pmsg->sadb_msg_type]); | ||||
} | } | ||||
if (!sbappendaddr(&rp->rcb_socket->so_rcv, (struct sockaddr *)&key_src, | if (!sbappendaddr(&rp->rcb_socket->so_rcv, (struct sockaddr *)&key_src, | ||||
m, NULL)) { | m, NULL)) { | ||||
PFKEYSTAT_INC(in_nomem); | PFKEYSTAT_INC(in_nomem); | ||||
m_freem(m); | m_freem(m); | ||||
error = ENOBUFS; | soroverflow(rp->rcb_socket); | ||||
} else | return ENOBUFS; | ||||
error = 0; | } | ||||
sorwakeup(rp->rcb_socket); | sorwakeup(rp->rcb_socket); | ||||
return error; | return 0; | ||||
} | } | ||||
/* so can be NULL if target != KEY_SENDUP_ONE */ | /* so can be NULL if target != KEY_SENDUP_ONE */ | ||||
int | int | ||||
key_sendup_mbuf(struct socket *so, struct mbuf *m, int target) | key_sendup_mbuf(struct socket *so, struct mbuf *m, int target) | ||||
{ | { | ||||
struct mbuf *n; | struct mbuf *n; | ||||
struct keycb *kp; | struct keycb *kp; | ||||
▲ Show 20 Lines • Show All 295 Lines • Show Last 20 Lines |