link-config.h revision 847a8a5fed4d265dfa659917515c6f9bd1b8d5c4
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering/***
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering This file is part of systemd.
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering systemd is free software; you can redistribute it and/or modify it
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering under the terms of the GNU Lesser General Public License as published by
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering the Free Software Foundation; either version 2.1 of the License, or
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering (at your option) any later version.
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering systemd is distributed in the hope that it will be useful, but
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering Lesser General Public License for more details.
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering You should have received a copy of the GNU Lesser General Public License
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering***/
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering#pragma once
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering#include "ethtool-util.h"
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poettering
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poettering#include "condition-util.h"
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poettering#include "libudev.h"
6bedfcbb2970e06a4d3280c8fb62083d252ede73Lennart Poettering#include "util.h"
07630cea1f3a845c09309f197ac7c4f11edd3b62Lennart Poettering#include "list.h"
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringtypedef struct link_config_ctx link_config_ctx;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringtypedef struct link_config link_config;
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poettering
d9e2daaf3d8649650cf9784b4fe9d9de4507da0cLennart Poetteringtypedef enum MACPolicy {
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering MACPOLICY_PERSISTENT,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering MACPOLICY_RANDOM,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering _MACPOLICY_MAX,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering _MACPOLICY_INVALID = -1
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering} MACPolicy;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poetteringtypedef enum NamePolicy {
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering NAMEPOLICY_DATABASE,
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poettering NAMEPOLICY_ONBOARD,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering NAMEPOLICY_SLOT,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering NAMEPOLICY_PATH,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering NAMEPOLICY_MAC,
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering _NAMEPOLICY_MAX,
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering _NAMEPOLICY_INVALID = -1
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering} NamePolicy;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poetteringstruct link_config {
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering char *filename;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering struct ether_addr *match_mac;
cb81cd8073392936882643af0129934bf67e96c4Lennart Poettering char *match_path;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering char *match_driver;
cb81cd8073392936882643af0129934bf67e96c4Lennart Poettering char *match_type;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering Condition *match_host;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering Condition *match_virt;
b6b1849830f5e4a6065c3b0c993668e500c954d3Lennart Poettering Condition *match_kernel;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering Condition *match_arch;
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering char *description;
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering struct ether_addr *mac;
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering MACPolicy mac_policy;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering NamePolicy *name_policy;
c75f27ea2b483f91d437ebaf8494457dc76f3fd6Lennart Poettering char *name;
10f9c75519671e7c7ab8993b54fe22da7c2d0c38Lennart Poettering char *alias;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering unsigned int mtu;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering unsigned int speed;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering Duplex duplex;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering WakeOnLan wol;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
4c1fc3e404d648c70bd2f50ac50aeac6ece8872eDaniel Mack LIST_FIELDS(link_config, links);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering};
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringint link_config_ctx_new(link_config_ctx **ret);
e9bc1871b974fa9e33d9c1a45e249e6d1c8bc562Lennart Poetteringvoid link_config_ctx_free(link_config_ctx *ctx);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringint link_config_load(link_config_ctx *ctx);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringbool link_config_should_reload(link_config_ctx *ctx);
e9bc1871b974fa9e33d9c1a45e249e6d1c8bc562Lennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringint link_config_get(link_config_ctx *ctx, struct udev_device *device, struct link_config **ret);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringint link_config_apply(link_config_ctx *ctx, struct link_config *config, struct udev_device *device, const char **name);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poetteringint link_get_driver(link_config_ctx *ctx, struct udev_device *device, char **ret);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringconst char *name_policy_to_string(NamePolicy p) _const_;
d7c7c334f56edab8cfc102b657366277a65738cfLennart PoetteringNamePolicy name_policy_from_string(const char *p) _pure_;
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringconst char *mac_policy_to_string(MACPolicy p) _const_;
d7c7c334f56edab8cfc102b657366277a65738cfLennart PoetteringMACPolicy mac_policy_from_string(const char *p) _pure_;
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
5bcd08db289cd02aad8a89b37b2a46244a7bd473Lennart Poettering/* gperf lookup function */
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringconst struct ConfigPerfItem* link_config_gperf_lookup(const char *key, unsigned length);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poetteringint config_parse_mac_policy(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
e9bc1871b974fa9e33d9c1a45e249e6d1c8bc562Lennart Poetteringint config_parse_name_policy(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
d7c7c334f56edab8cfc102b657366277a65738cfLennart Poettering