18d36e1dfSRoy Marples /* SPDX-License-Identifier: BSD-2-Clause */ 27827cba2SAaron LI /* 37827cba2SAaron LI * dhcpcd - DHCP client daemon 4*80aa9461SRoy Marples * Copyright (c) 2006-2023 Roy Marples <roy@marples.name> 57827cba2SAaron LI * All rights reserved 67827cba2SAaron LI 77827cba2SAaron LI * Redistribution and use in source and binary forms, with or without 87827cba2SAaron LI * modification, are permitted provided that the following conditions 97827cba2SAaron LI * are met: 107827cba2SAaron LI * 1. Redistributions of source code must retain the above copyright 117827cba2SAaron LI * notice, this list of conditions and the following disclaimer. 127827cba2SAaron LI * 2. Redistributions in binary form must reproduce the above copyright 137827cba2SAaron LI * notice, this list of conditions and the following disclaimer in the 147827cba2SAaron LI * documentation and/or other materials provided with the distribution. 157827cba2SAaron LI * 167827cba2SAaron LI * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 177827cba2SAaron LI * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 187827cba2SAaron LI * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 197827cba2SAaron LI * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 207827cba2SAaron LI * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 217827cba2SAaron LI * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 227827cba2SAaron LI * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 237827cba2SAaron LI * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 247827cba2SAaron LI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 257827cba2SAaron LI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 267827cba2SAaron LI * SUCH DAMAGE. 277827cba2SAaron LI */ 287827cba2SAaron LI 297827cba2SAaron LI #ifndef CONTROL_H 307827cba2SAaron LI #define CONTROL_H 317827cba2SAaron LI 321b3b16a2SRoy Marples #include <stdbool.h> 331b3b16a2SRoy Marples 347827cba2SAaron LI #include "dhcpcd.h" 357827cba2SAaron LI 368d36e1dfSRoy Marples #if !defined(CTL_FREE_LIST) 378d36e1dfSRoy Marples #define CTL_FREE_LIST 1 388d36e1dfSRoy Marples #elif CTL_FREE_LIST == 0 398d36e1dfSRoy Marples #undef CTL_FREE_LIST 408d36e1dfSRoy Marples #endif 418d36e1dfSRoy Marples 427827cba2SAaron LI /* Limit queue size per fd */ 437827cba2SAaron LI #define CONTROL_QUEUE_MAX 100 447827cba2SAaron LI 457827cba2SAaron LI struct fd_data { 467827cba2SAaron LI TAILQ_ENTRY(fd_data) next; 478d36e1dfSRoy Marples void *data; 488d36e1dfSRoy Marples size_t data_size; 497827cba2SAaron LI size_t data_len; 507f8103cdSRoy Marples unsigned int data_flags; 517827cba2SAaron LI }; 527827cba2SAaron LI TAILQ_HEAD(fd_data_head, fd_data); 537827cba2SAaron LI 547827cba2SAaron LI struct fd_list { 557827cba2SAaron LI TAILQ_ENTRY(fd_list) next; 567827cba2SAaron LI struct dhcpcd_ctx *ctx; 577827cba2SAaron LI int fd; 587827cba2SAaron LI unsigned int flags; 597827cba2SAaron LI struct fd_data_head queue; 608d36e1dfSRoy Marples #ifdef CTL_FREE_LIST 617827cba2SAaron LI struct fd_data_head free_queue; 628d36e1dfSRoy Marples #endif 637827cba2SAaron LI }; 647827cba2SAaron LI TAILQ_HEAD(fd_list_head, fd_list); 657827cba2SAaron LI 667f8103cdSRoy Marples #define FD_LISTEN 0x01U 677f8103cdSRoy Marples #define FD_UNPRIV 0x02U 687f8103cdSRoy Marples #define FD_SENDLEN 0x04U 697827cba2SAaron LI 70d4fb1e02SRoy Marples int control_start(struct dhcpcd_ctx *, const char *, sa_family_t); 717827cba2SAaron LI int control_stop(struct dhcpcd_ctx *); 72d4fb1e02SRoy Marples int control_open(const char *, sa_family_t, bool); 737827cba2SAaron LI ssize_t control_send(struct dhcpcd_ctx *, int, char * const *); 747f8103cdSRoy Marples struct fd_list *control_new(struct dhcpcd_ctx *, int, unsigned int); 757f8103cdSRoy Marples void control_free(struct fd_list *); 767f8103cdSRoy Marples void control_delete(struct fd_list *); 777f8103cdSRoy Marples int control_queue(struct fd_list *, void *, size_t); 787f8103cdSRoy Marples void control_recvdata(struct fd_list *fd, char *, size_t); 797827cba2SAaron LI #endif 80