a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen/***
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen This file is part of systemd.
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen systemd is free software; you can redistribute it and/or modify it
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen under the terms of the GNU Lesser General Public License as published by
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen the Free Software Foundation; either version 2.1 of the License, or
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen (at your option) any later version.
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen systemd is distributed in the hope that it will be useful, but
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen WITHOUT ANY WARRANTY; without even the implied warranty of
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen Lesser General Public License for more details.
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen You should have received a copy of the GNU Lesser General Public License
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen along with systemd; If not, see <http://www.gnu.org/licenses/>.
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen***/
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen#pragma once
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen#include <macro.h>
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen/* we can't use DUPLEX_ prefix, as it
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen * clashes with <linux/ethtool.h> */
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersentypedef enum Duplex {
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen DUP_FULL,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen DUP_HALF,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen _DUP_MAX,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen _DUP_INVALID = -1
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen} Duplex;
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersentypedef enum WakeOnLan {
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen WOL_PHY,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen WOL_MAGIC,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen WOL_OFF,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen _WOL_MAX,
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen _WOL_INVALID = -1
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen} WakeOnLan;
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersenint ethtool_connect(int *ret);
a501033335ed402c8f7e86fe41a15531ba69abd7Tom Gundersen
aedca89268ed4fd6be41e55a605f011033ad1fb5Tom Gundersenint ethtool_get_driver(int *fd, const char *ifname, char **ret);
aedca89268ed4fd6be41e55a605f011033ad1fb5Tom Gundersenint ethtool_set_speed(int *fd, const char *ifname, unsigned int speed, Duplex duplex);
aedca89268ed4fd6be41e55a605f011033ad1fb5Tom Gundersenint ethtool_set_wol(int *fd, const char *ifname, WakeOnLan wol);
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersenconst char *duplex_to_string(Duplex d) _const_;
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom GundersenDuplex duplex_from_string(const char *d) _pure_;
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersenconst char *wol_to_string(WakeOnLan wol) _const_;
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom GundersenWakeOnLan wol_from_string(const char *wol) _pure_;
5fde13d748749f0e06e2e6cdd15f0980a79ea82cTom Gundersen
71a6151083d842b2f5bf04e50239f0bf85d34d2eTom Gundersenint config_parse_duplex(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);
71a6151083d842b2f5bf04e50239f0bf85d34d2eTom Gundersenint config_parse_wol(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);