| 12454 | } |
| 12455 | |
| 12456 | int |
| 12457 | sctp_lower_sosend(struct socket *so, |
| 12458 | struct sockaddr *addr, |
| 12459 | struct uio *uio, |
| 12460 | struct mbuf *i_pak, |
| 12461 | struct mbuf *control, |
| 12462 | int flags, |
| 12463 | struct sctp_sndrcvinfo *srcv |
| 12464 | , |
| 12465 | struct thread *p |
| 12466 | ) |
| 12467 | { |
| 12468 | struct epoch_tracker et; |
| 12469 | ssize_t sndlen = 0, max_len, local_add_more; |
| 12470 | int error, len; |
| 12471 | struct mbuf *top = NULL; |
| 12472 | int queue_only = 0, queue_only_for_init = 0; |
| 12473 | int free_cnt_applied = 0; |
| 12474 | int un_sent; |
| 12475 | int now_filled = 0; |
| 12476 | unsigned int inqueue_bytes = 0; |
| 12477 | struct sctp_block_entry be; |
| 12478 | struct sctp_inpcb *inp; |
| 12479 | struct sctp_tcb *stcb = NULL; |
| 12480 | struct timeval now; |
| 12481 | struct sctp_nets *net; |
| 12482 | struct sctp_association *asoc; |
| 12483 | struct sctp_inpcb *t_inp; |
| 12484 | int user_marks_eor; |
| 12485 | int create_lock_applied = 0; |
| 12486 | int nagle_applies = 0; |
| 12487 | int some_on_control = 0; |
| 12488 | int got_all_of_the_send = 0; |
| 12489 | int hold_tcblock = 0; |
| 12490 | int non_blocking = 0; |
| 12491 | ssize_t local_soresv = 0; |
| 12492 | uint16_t port; |
| 12493 | uint16_t sinfo_flags; |
| 12494 | sctp_assoc_t sinfo_assoc_id; |
| 12495 | |
| 12496 | error = 0; |
| 12497 | net = NULL; |
| 12498 | stcb = NULL; |
| 12499 | asoc = NULL; |
| 12500 | |
| 12501 | t_inp = inp = (struct sctp_inpcb *)so->so_pcb; |
| 12502 | if (inp == NULL) { |
| 12503 | SCTP_LTRACE_ERR_RET(NULL, NULL, NULL, SCTP_FROM_SCTP_OUTPUT, EINVAL); |
| 12504 | error = EINVAL; |
| 12505 | if (i_pak) { |
| 12506 | SCTP_RELEASE_PKT(i_pak); |
| 12507 | } |
| 12508 | return (error); |
| 12509 | } |
| 12510 | if ((uio == NULL) && (i_pak == NULL)) { |
| 12511 | SCTP_LTRACE_ERR_RET(inp, stcb, net, SCTP_FROM_SCTP_OUTPUT, EINVAL); |
| 12512 | return (EINVAL); |
| 12513 | } |
no test coverage detected