17#include <linux/if_tun.h>
61 os <<
"Error: can't call NetlinkLinkSet with no interface" << std::endl;
68 os <<
"Error while executing NetlinkLinkSet " <<
dev <<
" mtu " <<
mtu
69 <<
": " <<
ret << std::endl;
75 os <<
"Error while executing NetlinkLinkSet " <<
dev <<
" up " <<
up
76 <<
": " <<
ret << std::endl;
82 std::ostringstream
os;
83 os <<
"netlink iface " <<
dev <<
" link set " <<
up <<
" mtu " <<
mtu;
102 unsigned char prefixlen_arg,
128 os <<
"Error: can't call NetlinkAddr4 with no interface" << std::endl;
144 os <<
"Error while executing NetlinkAddr4(add: " <<
add <<
") "
145 <<
dev <<
": " <<
ret << std::endl;
151 std::ostringstream
os;
152 os <<
"netlink iface " <<
dev <<
" " << (
add ?
"add" :
"del") <<
" "
175 unsigned char prefixlen_arg,
198 os <<
"Error: can't call NetlinkAddr6 with no interface" << std::endl;
214 os <<
"Error while executing NetlinkAddr6(add: " <<
add <<
") "
215 <<
dev <<
": " <<
ret << std::endl;
221 std::ostringstream
os;
222 os <<
"netlink iface " <<
dev <<
" " << (
add ?
"add" :
"del") <<
" "
266 os <<
"Error: can't call NetlinkAddr4PtP with no interface" << std::endl;
282 os <<
"Error while executing NetlinkAddr4PtP(add: " <<
add <<
") "
283 <<
dev <<
": " <<
ret << std::endl;
289 return "netlink iface " +
dev +
" " + (
add ?
"add" :
"del") +
" ptp "
313 :
route(dst_arg, prefixlen_arg),
335 os <<
"Error: can't call NetlinkRoute4 with no interface" << std::endl;
351 os <<
"Error while executing NetlinkRoute4(add: " <<
add <<
") "
352 <<
dev <<
": " <<
ret << std::endl;
358 std::ostringstream
os;
359 os <<
"netlink route " << (
add ?
"add" :
"del") <<
" dev " <<
dev <<
" "
385 :
route(dst_arg, prefixlen_arg),
407 os <<
"Error: can't call NetlinkRoute6 with no interface" << std::endl;
423 os <<
"Error while executing NetlinkRoute6(add: " <<
add <<
") "
424 <<
dev <<
": " <<
ret << std::endl;
430 std::ostringstream
os;
431 os <<
"netlink route " << (
add ?
"add" :
"del") <<
" dev " <<
dev <<
" "
459inline int iface_new(std::ostringstream &
os,
const std::string &dev,
const std::string &type)
465 os <<
"Error: can't call NetlinkLinkNew with no interface" << std::endl;
471 os <<
"Error: can't call NetlinkLinkNew with no interfacei type" << std::endl;
478 os <<
"Error while executing NetlinkLinkNew " << dev <<
": " <<
ret << std::endl;
484inline int iface_del(std::ostringstream &
os,
const std::string &dev)
490 os <<
"Error: can't call NetlinkLinkDel with no interface" << std::endl;
497 os <<
"Error while executing NetlinkLinkDel " << dev <<
": " <<
ret << std::endl;
515 const std::string &gateway_str,
516 const std::string &dev,
518 const unsigned int flags,
519 std::vector<IP::Route> *rtvec,
533 add->route.addr = net;
560 add->route.addr = net;
581 const std::string &gateway_str,
582 const std::string &dev,
584 const unsigned int flags,
585 std::vector<IP::Route> *rtvec,
602 add->dev = iface_name;
617 std::vector<IP::Route> *rtvec,
632 | ~IPv4::Addr::netmask_from_prefix_len(local4->
prefix_length);
633 add->dev = iface_name;
665 add->dev = iface_name;
692 std::vector<IP::Route> *rtvec,
695 const unsigned int flags)
704 iface_config(iface_name, -1, pull, rtvec, create, destroy);
725 if (local4 && !local4->
gateway.empty())
736 OPENVPN_LOG(
"ERROR: IPv4 route pushed without IPv4 ifconfig and/or route-gateway");
750 OPENVPN_LOG(
"NOTE: exclude IPv6 routes not supported yet");
765 OPENVPN_LOG(
"NOTE: cannot determine gateway for exclude IPv4 routes");
821 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)
RCPtr< NetlinkAddr4PtP > Ptr
virtual std::string to_string() const override
NetlinkAddr4PtP * copy() const
virtual 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)
virtual std::string to_string() const override
virtual void execute(std::ostream &os) override
RCPtr< NetlinkAddr4 > Ptr
NetlinkAddr4 * copy() const
NetlinkAddr6(std::string dev_arg, IPv6::Addr &addr_arg, unsigned char prefixlen_arg, bool add_arg)
NetlinkAddr6 * copy() const
virtual std::string to_string() const override
virtual void execute(std::ostream &os) override
RCPtr< NetlinkAddr6 > Ptr
NetlinkLinkSet * copy() const
virtual void execute(std::ostream &os) override
NetlinkLinkSet(std::string dev_arg, bool up_arg, int mtu_arg)
RCPtr< NetlinkLinkSet > Ptr
virtual 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)
virtual void execute(std::ostream &os) override
RCPtr< NetlinkRoute4 > Ptr
virtual std::string to_string() const override
NetlinkRoute4 * copy() const
virtual void execute(std::ostream &os) override
virtual 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
RCPtr< NetlinkRoute6 > Ptr
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)