add core state management

This commit is contained in:
Ariadne Conill 2020-07-20 07:42:16 -06:00
parent 6606432600
commit d4e1997486
3 changed files with 78 additions and 2 deletions

View file

@ -4,7 +4,8 @@ PACKAGE_BUGREPORT := https://github.com/kaniini/ifupdown-ng/issues/new
INTERFACES_FILE := /etc/network/interfaces INTERFACES_FILE := /etc/network/interfaces
CFLAGS := -ggdb3 -O2 -Wall -I. -DINTERFACES_FILE=\"${INTERFACES_FILE}\" -DPACKAGE_NAME=\"${PACKAGE_NAME}\" -DPACKAGE_VERSION=\"${PACKAGE_VERSION}\" -DPACKAGE_BUGREPORT=\"${PACKAGE_BUGREPORT}\" STATE_FILE := /run/ifstate
CFLAGS := -ggdb3 -O2 -Wall -I. -DINTERFACES_FILE=\"${INTERFACES_FILE}\" -DSTATE_FILE=\"${STATE_FILE}\" -DPACKAGE_NAME=\"${PACKAGE_NAME}\" -DPACKAGE_VERSION=\"${PACKAGE_VERSION}\" -DPACKAGE_BUGREPORT=\"${PACKAGE_BUGREPORT}\"
LIBIFUPDOWN_SRC = \ LIBIFUPDOWN_SRC = \
@ -13,7 +14,8 @@ LIBIFUPDOWN_SRC = \
libifupdown/interface.c \ libifupdown/interface.c \
libifupdown/interface-file.c \ libifupdown/interface-file.c \
libifupdown/fgetline.c \ libifupdown/fgetline.c \
libifupdown/version.c libifupdown/version.c \
libifupdown/state.c
LIBIFUPDOWN_OBJ = ${LIBIFUPDOWN_SRC:.c=.o} LIBIFUPDOWN_OBJ = ${LIBIFUPDOWN_SRC:.c=.o}
LIBIFUPDOWN_LIB = libifupdown.a LIBIFUPDOWN_LIB = libifupdown.a

48
libifupdown/state.c Normal file
View file

@ -0,0 +1,48 @@
/*
* libifupdown/state.h
* Purpose: state management
*
* Copyright (c) 2020 Ariadne Conill <ariadne@dereferenced.org>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* This software is provided 'as is' and without any warranty, express or
* implied. In no event shall the authors be liable for any damages arising
* from the use of this software.
*/
#include <string.h>
#include "libifupdown/state.h"
void
lif_state_upsert(struct lif_dict *state, const char *ifname, struct lif_interface *iface)
{
lif_dict_add(state, ifname, strdup(iface->ifname));
}
void
lif_state_delete(struct lif_dict *state, const char *ifname)
{
struct lif_dict_entry *entry = lif_dict_find(state, ifname);
if (entry == NULL)
return;
free(entry->data);
lif_dict_delete_entry(state, entry);
}
void
lif_state_write(const struct lif_dict *state, FILE *f)
{
struct lif_node *iter;
LIF_DICT_FOREACH(iter, state)
{
struct lif_dict_entry *entry = iter->data;
fprintf(f, "%s=%s\n", entry->key, (const char *) entry->data);
}
}

26
libifupdown/state.h Normal file
View file

@ -0,0 +1,26 @@
/*
* libifupdown/state.h
* Purpose: state management
*
* Copyright (c) 2020 Ariadne Conill <ariadne@dereferenced.org>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* This software is provided 'as is' and without any warranty, express or
* implied. In no event shall the authors be liable for any damages arising
* from the use of this software.
*/
#ifndef LIBIFUPDOWN_STATE_H__GUARD
#define LIBIFUPDOWN_STATE_H__GUARD
#include <stdio.h>
#include "libifupdown/interface.h"
extern void lif_state_upsert(struct lif_dict *state, const char *ifname, struct lif_interface *iface);
extern void lif_state_delete(struct lif_dict *state, const char *ifname);
extern void lif_state_write(const struct lif_dict *state, FILE *f);
#endif