git: 2496d812a9c7 - main - sctp: Simplify the free port search in sctp_inpcb_bind()
Mark Johnston
markj at FreeBSD.org
Tue Aug 31 11:46:56 UTC 2021
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=2496d812a9c781f8e4be1bfd22375c6e686665da
commit 2496d812a9c781f8e4be1bfd22375c6e686665da
Author: Mark Johnston <markj at FreeBSD.org>
AuthorDate: 2021-08-31 11:43:39 +0000
Commit: Mark Johnston <markj at FreeBSD.org>
CommitDate: 2021-08-31 11:43:39 +0000
sctp: Simplify the free port search in sctp_inpcb_bind()
Eliminate a flag variable and reduce indentation. No functional change
intended.
Reviewed by: tuexen
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D31733
---
sys/netinet/sctp_pcb.c | 28 ++++++++++++----------------
1 file changed, 12 insertions(+), 16 deletions(-)
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index f55c3d4891a6..def6292456d4 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -3012,7 +3012,6 @@ continue_anyway:
} else {
uint16_t first, last, candidate;
uint16_t count;
- int done;
if (ip_inp->inp_flags & INP_HIGHPORT) {
first = MODULE_GLOBAL(ipport_hifirstauto);
@@ -3040,25 +3039,22 @@ continue_anyway:
count = last - first + 1; /* number of candidates */
candidate = first + sctp_select_initial_TSN(&inp->sctp_ep) % (count);
- done = 0;
- while (!done) {
+ for (;;) {
if (sctp_isport_inuse(inp, htons(candidate), inp->def_vrf_id) == NULL) {
- done = 1;
+ lport = htons(candidate);
+ break;
}
- if (!done) {
- if (--count == 0) {
- SCTP_INP_WUNLOCK(inp);
- SCTP_INP_INFO_WUNLOCK();
- SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EADDRINUSE);
- return (EADDRINUSE);
- }
- if (candidate == last)
- candidate = first;
- else
- candidate = candidate + 1;
+ if (--count == 0) {
+ SCTP_INP_WUNLOCK(inp);
+ SCTP_INP_INFO_WUNLOCK();
+ SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EADDRINUSE);
+ return (EADDRINUSE);
}
+ if (candidate == last)
+ candidate = first;
+ else
+ candidate = candidate + 1;
}
- lport = htons(candidate);
}
if (inp->sctp_flags & (SCTP_PCB_FLAGS_SOCKET_GONE |
SCTP_PCB_FLAGS_SOCKET_ALLGONE)) {
More information about the dev-commits-src-all
mailing list