xref: /dflybsd-src/contrib/dhcpcd/src/control.h (revision c80c9bba1b2fa2824af94c686145cb7eb7db2cd5)
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