diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2021-12-27 12:57:52 +0100 | 
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2021-12-29 09:12:39 +0100 | 
| commit | 80f6513802c56480582c8b5baa2168b9e5268aaa (patch) | |
| tree | 69753cef02ba43ca4dec30feb4ee6f6a09f47b58 /src/lib | |
| parent | 98cd70a4b2358d8dd1c3b6e4a061d7eaadcb3bd1 (diff) | |
| download | ouroboros-80f6513802c56480582c8b5baa2168b9e5268aaa.tar.gz ouroboros-80f6513802c56480582c8b5baa2168b9e5268aaa.zip | |
lib: Don't use pointer to set FRCT flags
The fccntl call FRCTSFLAGS was using a pointer to a flags so set
flags, which should just be a regular uint16_t.
For instance, the FRCTLINGER flags can now be turned off using
fccntl(fd, FRCTSFLAGS, FRCTFRESCNTL | FRCTFRTX)
leaving only resource control (flow control, FRCTFRESCNTL) and
retransmission enabled. Note that retransmission (FRCTFRTX) can't be
enabled or disabled on a live flow, it will be set on flow allocation.
Updates the man page for fccntl to add these FRCT options.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/dev.c | 9 | 
1 files changed, 4 insertions, 5 deletions
| diff --git a/src/lib/dev.c b/src/lib/dev.c index c8b7d93b..4416a03e 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -853,6 +853,7 @@ int fccntl(int fd,  {          uint32_t *        fflags;          uint16_t *        cflags; +        uint16_t          csflags;          va_list           l;          struct timespec * timeo;          qosspec_t *       qs; @@ -963,15 +964,13 @@ int fccntl(int fd,                  *fflags = flow->oflags;                  break;          case FRCTSFLAGS: -                cflags = va_arg(l, uint16_t *); -                if (cflags == NULL) -                        goto einval; +                csflags = (uint16_t) va_arg(l, uint32_t);                  if (flow->frcti == NULL)                          goto eperm; -                frcti_setflags(flow->frcti, *cflags); +                frcti_setflags(flow->frcti, csflags);                  break;          case FRCTGFLAGS: -                cflags = (uint16_t *) va_arg(l, int *); +                cflags = (uint16_t *) va_arg(l, uint32_t *);                  if (cflags == NULL)                          goto einval;                  if (flow->frcti == NULL) | 
