17#include <linux/if_tun.h>
59 os <<
"Error: can't call NetlinkLinkSet with no interface\n";
66 os <<
"Error while executing NetlinkLinkSet " <<
dev <<
" mtu " <<
mtu
67 <<
": " <<
ret <<
"\n";
73 os <<
"Error while executing NetlinkLinkSet " <<
dev <<
" up " <<
up
74 <<
": " <<
ret <<
"\n";
80 std::ostringstream
os;
81 os <<
"netlink iface " <<
dev <<
" link set " <<
up <<
" mtu " <<
mtu;
98 unsigned char prefixlen_arg,
124 os <<
"Error: can't call NetlinkAddr4 with no interface\n";
140 os <<
"Error while executing NetlinkAddr4(add: " <<
add <<
") "
141 <<
dev <<
": " <<
ret <<
"\n";
147 std::ostringstream
os;
148 os <<
"netlink iface " <<
dev <<
" " << (
add ?
"add" :
"del") <<
" "
169 unsigned char prefixlen_arg,
192 os <<
"Error: can't call NetlinkAddr6 with no interface\n";
208 os <<
"Error while executing NetlinkAddr6(add: " <<
add <<
") "
209 <<
dev <<
": " <<
ret <<
"\n";
215 std::ostringstream
os;
216 os <<
"netlink iface " <<
dev <<
" " << (
add ?
"add" :
"del") <<
" "
258 os <<
"Error: can't call NetlinkAddr4PtP with no interface\n";
274 os <<
"Error while executing NetlinkAddr4PtP(add: " <<
add <<
") "
275 <<
dev <<
": " <<
ret <<
"\n";
281 return "netlink iface " +
dev +
" " + (
add ?
"add" :
"del") +
" ptp "
303 :
route(dst_arg, prefixlen_arg),
325 os <<
"Error: can't call NetlinkRoute4 with no interface\n";
341 os <<
"Error while executing NetlinkRoute4(add: " <<
add <<
") "
342 <<
dev <<
": " <<
ret <<
"\n";
348 std::ostringstream
os;
349 os <<
"netlink route " << (
add ?
"add" :
"del") <<
" dev " <<
dev <<
" "
373 :
route(dst_arg, prefixlen_arg),
395 os <<
"Error: can't call NetlinkRoute6 with no interface\n";
411 os <<
"Error while executing NetlinkRoute6(add: " <<
add <<
") "
412 <<
dev <<
": " <<
ret <<
"\n";
418 std::ostringstream
os;
419 os <<
"netlink route " << (
add ?
"add" :
"del") <<
" dev " <<
dev <<
" "
447inline int iface_new(std::ostringstream &
os,
const std::string &dev,
const std::string &type)
453 os <<
"Error: can't call NetlinkLinkNew with no interface\n";
459 os <<
"Error: can't call NetlinkLinkNew with no interfacei type\n";
466 os <<
"Error while executing NetlinkLinkNew " << dev <<
": " <<
ret <<
"\n";
472inline int iface_del(std::ostringstream &
os,
const std::string &dev)
478 os <<
"Error: can't call NetlinkLinkDel with no interface\n";
485 os <<
"Error while executing NetlinkLinkDel " << dev <<
": " <<
ret <<
"\n";
503 const std::string &gateway_str,
504 const std::string &dev,
506 const unsigned int flags,
507 std::vector<IP::Route> *rtvec,
521 add->route.addr = net;
548 add->route.addr = net;
569 const std::string &gateway_str,
570 const std::string &dev,
572 const unsigned int flags,
573 std::vector<IP::Route> *rtvec,
590 add->dev = iface_name;
605 std::vector<IP::Route> *rtvec,
620 | ~IPv4::Addr::netmask_from_prefix_len(local4->
prefix_length);
621 add->dev = iface_name;
653 add->dev = iface_name;
680 std::vector<IP::Route> *rtvec,
683 const unsigned int flags)
692 iface_config(iface_name, -1, pull, rtvec, create, destroy);
713 if (local4 && !local4->
gateway.empty())
724 OPENVPN_LOG(
"ERROR: IPv4 route pushed without IPv4 ifconfig and/or route-gateway");
738 OPENVPN_LOG(
"NOTE: exclude IPv6 routes not supported yet");
753 OPENVPN_LOG(
"NOTE: cannot determine gateway for exclude IPv4 routes");
809 std::vector<IP::Route> *rtvec,
std::string to_string() const
static Addr from_ipv6(IPv6::Addr addr)
static Addr from_ipv4(IPv4::Addr addr)
static Addr netmask_from_prefix_len(const unsigned int prefix_len)
unsigned int prefix_len() const
std::string to_string() const
static Addr from_string(const std::string &ipstr, const TITLE &title)
unsigned int prefix_len() const
static Addr netmask_from_prefix_len(const unsigned int prefix_len)
static void add(ipv6addr &dest, const ipv6addr &src)
std::string to_string() const
static Addr from_string(const std::string &ipstr, const TITLE &title)
const std::string & dev() const
const IP::Addr & addr() const
Route address class that may use non-canonical form.
unsigned char prefix_length
RemoteAddress remote_address
std::vector< Route > add_routes
const RouteAddress * vpn_ipv6() const
Gets the IPv6 tunnel address.
const RouteAddress * vpn_ipv4() const
Gets the IPv4 tunnel address.
std::vector< Route > exclude_routes
static int net_route_del(const IP::Route4 &route, const IPv4::Addr &gw, const std::string &iface, const uint32_t table, const int metric)
static int net_iface_del(const std::string &iface)
static int net_addr_add(const std::string &iface, const IPv4::Addr &addr, const unsigned char prefixlen, const IPv4::Addr &broadcast)
static int net_iface_up(std::string &iface, bool up)
static int net_iface_mtu_set(std::string &iface, uint32_t mtu)
static int net_addr_ptp_del(const std::string &iface, const IPv4::Addr &local, const IPv4::Addr &remote)
static int net_route_add(const IP::Route4 &route, const IPv4::Addr &gw, const std::string &iface, const uint32_t table, const int metric)
static int net_addr_del(const std::string &iface, const IPv4::Addr &addr, const unsigned char prefixlen)
static int net_iface_new(const std::string &iface, const std::string &type)
Add new interface (similar to ip link add)
static int net_addr_ptp_add(const std::string &iface, const IPv4::Addr &local, const IPv4::Addr &remote)
#define OPENVPN_LOG(args)
void add_del_route(const std::string &addr_str, const int prefix_len, const std::string &gateway_str, const std::string &dev, const int metric, const unsigned int flags, std::vector< IP::Route > *rtvec, Action::Ptr &create, Action::Ptr &destroy)
void iface_config(const std::string &iface_name, int unit, const TunBuilderCapture &pull, std::vector< IP::Route > *rtvec, ActionList &create, ActionList &destroy)
void iface_up(const std::string &iface_name, const int mtu, ActionList &create, ActionList &destroy)
int iface_new(std::ostringstream &os, const std::string &dev, const std::string &type)
Add new interface.
int iface_del(std::ostringstream &os, const std::string &dev)
std::string to_string() const override
NetlinkAddr4PtP * copy() const
NetlinkAddr4PtP()=default
void execute(std::ostream &os) override
NetlinkAddr4PtP(std::string dev_arg, IPv4::Addr local_arg, IPv4::Addr remote_arg, bool add_arg)
NetlinkAddr4(std::string dev_arg, IPv4::Addr &addr_arg, unsigned char prefixlen_arg, IPv4::Addr &broadcast_arg, bool add_arg)
std::string to_string() const override
void execute(std::ostream &os) override
NetlinkAddr4 * copy() const
NetlinkAddr6(std::string dev_arg, IPv6::Addr &addr_arg, unsigned char prefixlen_arg, bool add_arg)
std::string to_string() const override
NetlinkAddr6 * copy() const
void execute(std::ostream &os) override
NetlinkLinkSet * copy() const
NetlinkLinkSet(std::string dev_arg, bool up_arg, int mtu_arg)
void execute(std::ostream &os) override
std::string to_string() const override
NetlinkRoute4(IPv4::Addr &dst_arg, int prefixlen_arg, IPv4::Addr &gw_arg, std::string dev_arg, int metric_arg, bool add_arg)
void execute(std::ostream &os) override
std::string to_string() const override
NetlinkRoute4 * copy() const
void execute(std::ostream &os) override
std::string to_string() const override
NetlinkRoute6(IPv6::Addr &dst_arg, int prefixlen_arg, IPv6::Addr &gw_arg, std::string dev_arg, int metric_arg, bool add_arg)
NetlinkRoute6 * copy() const
static void add_bypass_route(const std::string &tun_iface_name, const std::string &address, bool ipv6, std::vector< IP::Route > *rtvec, ActionList &create, ActionList &destroy)
static void tun_config(const std::string &iface_name, const TunBuilderCapture &pull, std::vector< IP::Route > *rtvec, ActionList &create, ActionList &destroy, const unsigned int flags)
int prefix_len(const IPv4::Addr::base_type mask)
static void add(const Time &t1, const Time::Duration &d1)