* send message to the socket. */
| 139 | * send message to the socket. |
| 140 | */ |
| 141 | static int |
| 142 | key_sendup0(struct rawcb *rp, struct mbuf *m, int promisc) |
| 143 | { |
| 144 | int error; |
| 145 | |
| 146 | if (promisc) { |
| 147 | struct sadb_msg *pmsg; |
| 148 | |
| 149 | M_PREPEND(m, sizeof(struct sadb_msg), M_NOWAIT); |
| 150 | if (m == NULL) { |
| 151 | PFKEYSTAT_INC(in_nomem); |
| 152 | return (ENOBUFS); |
| 153 | } |
| 154 | pmsg = mtod(m, struct sadb_msg *); |
| 155 | bzero(pmsg, sizeof(*pmsg)); |
| 156 | pmsg->sadb_msg_version = PF_KEY_V2; |
| 157 | pmsg->sadb_msg_type = SADB_X_PROMISC; |
| 158 | pmsg->sadb_msg_len = PFKEY_UNIT64(m->m_pkthdr.len); |
| 159 | /* pid and seq? */ |
| 160 | |
| 161 | PFKEYSTAT_INC(in_msgtype[pmsg->sadb_msg_type]); |
| 162 | } |
| 163 | |
| 164 | if (!sbappendaddr(&rp->rcb_socket->so_rcv, (struct sockaddr *)&key_src, |
| 165 | m, NULL)) { |
| 166 | PFKEYSTAT_INC(in_nomem); |
| 167 | m_freem(m); |
| 168 | error = ENOBUFS; |
| 169 | } else |
| 170 | error = 0; |
| 171 | sorwakeup(rp->rcb_socket); |
| 172 | return error; |
| 173 | } |
| 174 | |
| 175 | /* so can be NULL if target != KEY_SENDUP_ONE */ |
| 176 | int |
no test coverage detected