Home | History | Annotate | Line # | Download | only in src
      1 /* SPDX-License-Identifier: BSD-2-Clause */
      2 /*
      3  * dhcpcd - DHCP client daemon
      4  * Copyright (c) 2006-2025 Roy Marples <roy (at) marples.name>
      5  * All rights reserved
      6 
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  * SUCH DAMAGE.
     27  */
     28 
     29 #ifndef CONTROL_H
     30 #define CONTROL_H
     31 
     32 #include <stdbool.h>
     33 
     34 #include "dhcpcd.h"
     35 #include "queue.h"
     36 
     37 #if !defined(CTL_FREE_LIST)
     38 #define	CTL_FREE_LIST 1
     39 #elif CTL_FREE_LIST == 0
     40 #undef	CTL_FREE_LIST
     41 #endif
     42 
     43 /* Limit queue size per fd */
     44 #define CONTROL_QUEUE_MAX	100
     45 
     46 struct fd_data {
     47 	TAILQ_ENTRY(fd_data) next;
     48 	void *data;
     49 	size_t data_size;
     50 	size_t data_len;
     51 	unsigned int data_flags;
     52 };
     53 TAILQ_HEAD(fd_data_head, fd_data);
     54 
     55 struct fd_list {
     56 	TAILQ_ENTRY(fd_list) next;
     57 	struct dhcpcd_ctx *ctx;
     58 	int fd;
     59 	unsigned int flags;
     60 	struct fd_data_head queue;
     61 #ifdef CTL_FREE_LIST
     62 	struct fd_data_head free_queue;
     63 #endif
     64 };
     65 TAILQ_HEAD(fd_list_head, fd_list);
     66 
     67 #define	FD_LISTEN	0x01U
     68 #define	FD_UNPRIV	0x02U
     69 #define	FD_SENDLEN	0x04U
     70 
     71 int control_start(struct dhcpcd_ctx *, const char *, sa_family_t);
     72 int control_stop(struct dhcpcd_ctx *);
     73 int control_open(const char *, sa_family_t, bool);
     74 ssize_t control_send(struct dhcpcd_ctx *, int, char * const *);
     75 struct fd_list *control_new(struct dhcpcd_ctx *, int, unsigned int);
     76 void control_free(struct fd_list *);
     77 void control_delete(struct fd_list *);
     78 int control_queue(struct fd_list *, void *, size_t);
     79 void control_recvdata(struct fd_list *fd, char *, size_t);
     80 #endif
     81