From 939ff04fb80605e688720f64c824be3d21dad07e Mon Sep 17 00:00:00 2001
From: Dmitry Kozlov <xeb@mail.ru>
Date: Sun, 22 Nov 2015 12:42:10 +0300
Subject: preparation for DPDK intergation (part 2)

---
 accel-pppd/ctrl/pppoe/pppoe.c   | 13 +++++++------
 accel-pppd/ctrl/pppoe/pppoe.h   |  2 +-
 accel-pppd/ifcfg.c              | 30 +++++++++++++++---------------
 accel-pppd/net.c                |  2 +-
 accel-pppd/ppp/ccp_mppe.c       |  6 +++---
 accel-pppd/ppp/lcp_opt_accomp.c |  4 ++--
 accel-pppd/ppp/lcp_opt_mru.c    |  2 +-
 accel-pppd/ppp/lcp_opt_pcomp.c  |  4 ++--
 accel-pppd/ppp/ppp.c            | 20 ++++++++++----------
 accel-pppd/ppp/ppp_ccp.c        |  4 ++--
 accel-pppd/ppp/ppp_ifcfg.c      | 16 ++++++++--------
 accel-pppd/session.c            |  2 +-
 12 files changed, 53 insertions(+), 52 deletions(-)

diff --git a/accel-pppd/ctrl/pppoe/pppoe.c b/accel-pppd/ctrl/pppoe/pppoe.c
index a9cbfbe8..74b368b3 100644
--- a/accel-pppd/ctrl/pppoe/pppoe.c
+++ b/accel-pppd/ctrl/pppoe/pppoe.c
@@ -411,7 +411,7 @@ static void connect_channel(struct pppoe_conn_t *conn)
 	triton_event_fire(EV_CTRL_STARTING, &conn->ppp.ses);
 	triton_event_fire(EV_CTRL_STARTED, &conn->ppp.ses);
 
-	sock = socket(AF_PPPOX, SOCK_STREAM, PX_PROTO_OE);
+	sock = net->pppox_socket(PX_PROTO_OE);
 	if (!sock) {
 		log_error("pppoe: socket(PPPOX): %s\n", strerror(errno));
 		goto out_err;
@@ -427,7 +427,7 @@ static void connect_channel(struct pppoe_conn_t *conn)
 	strcpy(sp.sa_addr.pppoe.dev, conn->serv->ifname);
 	memcpy(sp.sa_addr.pppoe.remote, conn->addr, ETH_ALEN);
 
-	if (connect(sock, (struct sockaddr *)&sp, sizeof(sp))) {
+	if (net->pppox_connect(sock, (struct sockaddr *)&sp, sizeof(sp))) {
 		log_error("pppoe: connect: %s\n", strerror(errno));
 		goto out_err_close;
 	}
@@ -1320,6 +1320,7 @@ static void __pppoe_server_start(const char *ifname, const char *opt, void *cli,
 	struct pppoe_serv_t *serv;
 	struct ifreq ifr;
 	int padi_limit = conf_padi_limit;
+	const struct ap_net *net = &def_net;
 
 	if (parse_server(opt, &padi_limit)) {
 		if (cli)
@@ -1350,7 +1351,7 @@ static void __pppoe_server_start(const char *ifname, const char *opt, void *cli,
 	}
 
 	strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-	if (ioctl(sock_fd, SIOCGIFHWADDR, &ifr)) {
+	if (net->sock_ioctl(SIOCGIFHWADDR, &ifr)) {
 		if (cli)
 			cli_sendv(cli, "ioctl(SIOCGIFHWADDR): %s\r\n", strerror(errno));
 		log_error("pppoe: ioctl(SIOCGIFHWADDR): %s\n", strerror(errno));
@@ -1373,7 +1374,7 @@ static void __pppoe_server_start(const char *ifname, const char *opt, void *cli,
 
 	memcpy(serv->hwaddr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
 
-	if (ioctl(sock_fd, SIOCGIFMTU, &ifr)) {
+	if (net->sock_ioctl(SIOCGIFMTU, &ifr)) {
 		if (cli)
 			cli_sendv(cli, "ioctl(SIOCGIFMTU): %s\r\n", strerror(errno));
 		log_error("pppoe: ioctl(SIOCGIFMTU): %s\n", strerror(errno));
@@ -1386,7 +1387,7 @@ static void __pppoe_server_start(const char *ifname, const char *opt, void *cli,
 		log_error("pppoe: interface %s has MTU of %i, should be %i\n", ifname, ifr.ifr_mtu, ETH_DATA_LEN);
 	}
 
-	if (ioctl(sock_fd, SIOCGIFINDEX, &ifr)) {
+	if (net->sock_ioctl(SIOCGIFINDEX, &ifr)) {
 		if (cli)
 			cli_sendv(cli, "ioctl(SIOCGIFINDEX): %s\r\n", strerror(errno));
 		log_error("pppoe: ioctl(SIOCGIFINDEX): %s\n", strerror(errno));
@@ -1397,7 +1398,7 @@ static void __pppoe_server_start(const char *ifname, const char *opt, void *cli,
 	serv->ctx.before_switch = pppoe_serv_ctx_switch;
 	serv->ifname = _strdup(ifname);
 	serv->ifindex = ifr.ifr_ifindex;
-	serv->net = &def_net;
+	serv->net = net;
 	pthread_mutex_init(&serv->lock, NULL);
 
 	INIT_LIST_HEAD(&serv->conn_list);
diff --git a/accel-pppd/ctrl/pppoe/pppoe.h b/accel-pppd/ctrl/pppoe/pppoe.h
index c28d96e2..b526c3e7 100644
--- a/accel-pppd/ctrl/pppoe/pppoe.h
+++ b/accel-pppd/ctrl/pppoe/pppoe.h
@@ -69,7 +69,7 @@ struct pppoe_serv_t
 	struct triton_context_t ctx;
 	struct rb_node node;
 
-	struct ap_net *net;
+	const struct ap_net *net;
 
 	uint8_t hwaddr[ETH_ALEN];
 	char *ifname;
diff --git a/accel-pppd/ifcfg.c b/accel-pppd/ifcfg.c
index 69b77e79..9c6f4dcf 100644
--- a/accel-pppd/ifcfg.c
+++ b/accel-pppd/ifcfg.c
@@ -101,13 +101,13 @@ void __export ap_session_accounting_started(struct ap_session *ses)
 	strcpy(ifr.ifr_name, ses->ifname);
 
 	if (ses->ctrl->dont_ifcfg) {
-		if (ioctl(sock_fd, SIOCGIFFLAGS, &ifr))
+		if (net->sock_ioctl(SIOCGIFFLAGS, &ifr))
 			log_ppp_error("failed to get interface flags: %s\n", strerror(errno));
 
 		if (!(ifr.ifr_flags & IFF_UP)) {
 			ifr.ifr_flags |= IFF_UP;
 
-			if (ioctl(sock_fd, SIOCSIFFLAGS, &ifr))
+			if (net->sock_ioctl(SIOCSIFFLAGS, &ifr))
 				log_ppp_error("failed to set interface flags: %s\n", strerror(errno));
 		}
 	} else {
@@ -120,7 +120,7 @@ void __export ap_session_accounting_started(struct ap_session *ses)
 				addr.sin_addr.s_addr = ses->ipv4->addr;
 				memcpy(&ifr.ifr_addr, &addr, sizeof(addr));
 
-				if (ioctl(sock_fd, SIOCSIFADDR, &ifr))
+				if (net->sock_ioctl(SIOCSIFADDR, &ifr))
 					log_ppp_error("failed to set IPv4 address: %s\n", strerror(errno));
 
 				/*if (ses->ctrl->type == CTRL_TYPE_IPOE) {
@@ -143,7 +143,7 @@ void __export ap_session_accounting_started(struct ap_session *ses)
 				} else*/ {
 					memcpy(&ifr.ifr_dstaddr, &addr, sizeof(addr));
 
-					if (ioctl(sock_fd, SIOCSIFDSTADDR, &ifr))
+					if (net->sock_ioctl(SIOCSIFDSTADDR, &ifr))
 						log_ppp_error("failed to set peer IPv4 address: %s\n", strerror(errno));
 				}
 			}
@@ -179,12 +179,12 @@ void __export ap_session_accounting_started(struct ap_session *ses)
 				}
 			}
 
-			if (ioctl(sock_fd, SIOCGIFFLAGS, &ifr))
+			if (net->sock_ioctl(SIOCGIFFLAGS, &ifr))
 				log_ppp_error("failed to get interface flags: %s\n", strerror(errno));
 
 			ifr.ifr_flags |= IFF_UP;
 
-			if (ioctl(sock_fd, SIOCSIFFLAGS, &ifr))
+			if (net->sock_ioctl(SIOCSIFFLAGS, &ifr))
 				log_ppp_error("failed to set interface flags: %s\n", strerror(errno));
 
 			if (ses->ctrl->ppp) {
@@ -193,7 +193,7 @@ void __export ap_session_accounting_started(struct ap_session *ses)
 					np.protocol = PPP_IP;
 					np.mode = NPMODE_PASS;
 
-					if (ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
+					if (net->ppp_ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
 						log_ppp_error("failed to set NP (IPv4) mode: %s\n", strerror(errno));
 				}
 
@@ -201,7 +201,7 @@ void __export ap_session_accounting_started(struct ap_session *ses)
 					np.protocol = PPP_IPV6;
 					np.mode = NPMODE_PASS;
 
-					if (ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
+					if (net->ppp_ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
 						log_ppp_error("failed to set NP (IPv6) mode: %s\n", strerror(errno));
 				}
 			}
@@ -228,13 +228,13 @@ void __export ap_session_ifdown(struct ap_session *ses)
 	memset(&ifr, 0, sizeof(ifr));
 	strcpy(ifr.ifr_name, ses->ifname);
 
-	ioctl(sock_fd, SIOCSIFFLAGS, &ifr);
+	net->sock_ioctl(SIOCSIFFLAGS, &ifr);
 
 	if (ses->ipv4) {
 		memset(&addr, 0, sizeof(addr));
 		addr.sin_family = AF_INET;
 		memcpy(&ifr.ifr_addr,&addr,sizeof(addr));
-		ioctl(sock_fd, SIOCSIFADDR, &ifr);
+		net->sock_ioctl(SIOCSIFADDR, &ifr);
 	}
 
 	if (ses->ipv6) {
@@ -275,15 +275,15 @@ int __export ap_session_rename(struct ap_session *ses, const char *ifname, int l
 	memcpy(ifr.ifr_newname, ifname, len);
 	ifr.ifr_newname[len] = 0;
 
-	r = ioctl(sock_fd, SIOCSIFNAME, &ifr);
+	r = net->sock_ioctl(SIOCSIFNAME, &ifr);
 	if (r && errno == EBUSY) {
-		ioctl(sock_fd, SIOCGIFFLAGS, &ifr);
+		net->sock_ioctl(SIOCGIFFLAGS, &ifr);
 		ifr.ifr_flags &= ~IFF_UP;
-		ioctl(sock_fd, SIOCSIFFLAGS, &ifr);
+		net->sock_ioctl(SIOCSIFFLAGS, &ifr);
 
 		memcpy(ifr.ifr_newname, ifname, len);
 		ifr.ifr_newname[len] = 0;
-		r = ioctl(sock_fd, SIOCSIFNAME, &ifr);
+		r = net->sock_ioctl(SIOCSIFNAME, &ifr);
 
 		up = 1;
 	}
@@ -302,7 +302,7 @@ int __export ap_session_rename(struct ap_session *ses, const char *ifname, int l
 	if (up) {
 		strcpy(ifr.ifr_name, ses->ifname);
 		ifr.ifr_flags |= IFF_UP;
-		ioctl(sock_fd, SIOCSIFFLAGS, &ifr);
+		net->sock_ioctl(SIOCSIFFLAGS, &ifr);
 	}
 
 	return r;
diff --git a/accel-pppd/net.c b/accel-pppd/net.c
index b1db5369..054885e4 100644
--- a/accel-pppd/net.c
+++ b/accel-pppd/net.c
@@ -33,7 +33,7 @@ static int def_sock_ioctl(unsigned long request, void *arg)
 	return ioctl(sock_fd, request, arg);
 }
 
-const struct ap_net def_net = {
+__export const struct ap_net def_net = {
 	.pppox_socket = def_pppox_socket,
 	.pppox_connect = def_pppox_connect,
 	.ppp_open = def_ppp_open,
diff --git a/accel-pppd/ppp/ccp_mppe.c b/accel-pppd/ppp/ccp_mppe.c
index 31bbad4d..4e8d6b93 100644
--- a/accel-pppd/ppp/ccp_mppe.c
+++ b/accel-pppd/ppp/ccp_mppe.c
@@ -115,7 +115,7 @@ static int setup_mppe_key(int fd, int transmit, uint8_t *key)
 	data.length = sizeof(buf);
 	data.transmit = transmit;
 
-	if (ioctl(fd, PPPIOCSCOMPRESS, &data)) {
+	if (net->ppp_ioctl(fd, PPPIOCSCOMPRESS, &data)) {
 		log_ppp_warn("mppe: MPPE requested but not supported by kernel\n");
 		return -1;
 	}
@@ -129,14 +129,14 @@ static int decrease_mtu(struct ppp_t *ppp)
 
 	strcpy(ifr.ifr_name, ppp->ses.ifname);
 
-	if (ioctl(sock_fd, SIOCGIFMTU, &ifr)) {
+	if (net->ppp_ioctl(sock_fd, SIOCGIFMTU, &ifr)) {
 		log_ppp_error("mppe: failed to get MTU: %s\n", strerror(errno));
 		return -1;
 	}
 
 	ifr.ifr_mtu -= MPPE_PAD;
 
-	if (ioctl(sock_fd, SIOCSIFMTU, &ifr)) {
+	if (net->ppp_ioctl(sock_fd, SIOCSIFMTU, &ifr)) {
 		log_ppp_error("mppe: failed to set MTU: %s\n", strerror(errno));
 		return -1;
 	}
diff --git a/accel-pppd/ppp/lcp_opt_accomp.c b/accel-pppd/ppp/lcp_opt_accomp.c
index f55ed3cf..7440fcf2 100644
--- a/accel-pppd/ppp/lcp_opt_accomp.c
+++ b/accel-pppd/ppp/lcp_opt_accomp.c
@@ -112,14 +112,14 @@ static int accomp_recv_conf_ack(struct ppp_lcp_t *lcp, struct lcp_option_t *opt,
 	struct accomp_option_t *accomp_opt = container_of(opt, typeof(*accomp_opt), opt);
 	int flags;
 
-	if (ioctl(lcp->ppp->chan_fd, PPPIOCGFLAGS, &flags))
+	if (net->ppp_ioctl(lcp->ppp->chan_fd, PPPIOCGFLAGS, &flags))
 		goto err;
 
 	flags &= ~SC_COMP_AC;
 	if (accomp_opt->accomp & 1)
 		flags |= SC_COMP_AC;
 
-	if (ioctl(lcp->ppp->chan_fd, PPPIOCSFLAGS, &flags))
+	if (net->ppp_ioctl(lcp->ppp->chan_fd, PPPIOCSFLAGS, &flags))
 		goto err;
 
 	return 0;
diff --git a/accel-pppd/ppp/lcp_opt_mru.c b/accel-pppd/ppp/lcp_opt_mru.c
index 1a6b187d..5f19bb21 100644
--- a/accel-pppd/ppp/lcp_opt_mru.c
+++ b/accel-pppd/ppp/lcp_opt_mru.c
@@ -125,7 +125,7 @@ static int mru_recv_conf_ack(struct ppp_lcp_t *lcp, struct lcp_option_t *opt, ui
 {
 	struct mru_option_t *mru_opt = container_of(opt, typeof(*mru_opt), opt);
 
-	if (ioctl(lcp->ppp->chan_fd, PPPIOCSMRU, &mru_opt->mru) &&
+	if (net->ppp_ioctl(lcp->ppp->chan_fd, PPPIOCSMRU, &mru_opt->mru) &&
 	    errno != EIO && errno != ENOTTY)
 		log_ppp_error("lcp:mru: failed to set channel MRU: %s\n", strerror(errno));
 
diff --git a/accel-pppd/ppp/lcp_opt_pcomp.c b/accel-pppd/ppp/lcp_opt_pcomp.c
index 28ca98f9..97560ccf 100644
--- a/accel-pppd/ppp/lcp_opt_pcomp.c
+++ b/accel-pppd/ppp/lcp_opt_pcomp.c
@@ -112,14 +112,14 @@ static int pcomp_recv_conf_ack(struct ppp_lcp_t *lcp, struct lcp_option_t *opt,
 	struct pcomp_option_t *pcomp_opt = container_of(opt, typeof(*pcomp_opt), opt);
 	int flags;
 
-	if (ioctl(lcp->ppp->chan_fd, PPPIOCGFLAGS, &flags))
+	if (net->ppp_ioctl(lcp->ppp->chan_fd, PPPIOCGFLAGS, &flags))
 		goto err;
 
 	flags &= ~SC_COMP_AC;
 	if (pcomp_opt->pcomp & 1)
 		flags |= SC_COMP_AC;
 
-	if (ioctl(lcp->ppp->chan_fd, PPPIOCSFLAGS, &flags))
+	if (net->ppp_ioctl(lcp->ppp->chan_fd, PPPIOCSFLAGS, &flags))
 		goto err;
 
 	return 0;
diff --git a/accel-pppd/ppp/ppp.c b/accel-pppd/ppp/ppp.c
index c47d8d93..22ebc24f 100644
--- a/accel-pppd/ppp/ppp.c
+++ b/accel-pppd/ppp/ppp.c
@@ -80,12 +80,12 @@ int __export establish_ppp(struct ppp_t *ppp)
 		return -1;
 
 	/* Open an instance of /dev/ppp and connect the channel to it */
-	if (ioctl(ppp->fd, PPPIOCGCHAN, &ppp->chan_idx) == -1) {
+	if (net->ppp_ioctl(ppp->fd, PPPIOCGCHAN, &ppp->chan_idx) == -1) {
 		log_ppp_error("ioctl(PPPIOCGCHAN): %s\n", strerror(errno));
 		return -1;
 	}
 
-	ppp->chan_fd = open("/dev/ppp", O_RDWR);
+	ppp->chan_fd = net->ppp_open();
 	if (ppp->chan_fd < 0) {
 		log_ppp_error("open(chan) /dev/ppp: %s\n", strerror(errno));
 		return -1;
@@ -98,7 +98,7 @@ int __export establish_ppp(struct ppp_t *ppp)
 		goto exit_close_chan;
 	}
 
-	if (ioctl(ppp->chan_fd, PPPIOCATTCHAN, &ppp->chan_idx) < 0) {
+	if (net->ppp_ioctl(ppp->chan_fd, PPPIOCATTCHAN, &ppp->chan_idx) < 0) {
 		log_ppp_error("ioctl(PPPIOCATTCHAN): %s\n", strerror(errno));
 		goto exit_close_chan;
 	}
@@ -155,7 +155,7 @@ int __export connect_ppp_channel(struct ppp_t *ppp)
 		ppp->ses.unit_idx = uc->unit_idx;
 		mempool_free(uc);
 	} else {
-		ppp->unit_fd = open("/dev/ppp", O_RDWR);
+		ppp->unit_fd = net->ppp_open();
 		if (ppp->unit_fd < 0) {
 			log_ppp_error("open(unit) /dev/ppp: %s\n", strerror(errno));
 			goto exit;
@@ -163,7 +163,7 @@ int __export connect_ppp_channel(struct ppp_t *ppp)
 
 		fcntl(ppp->unit_fd, F_SETFD, fcntl(ppp->unit_fd, F_GETFD) | FD_CLOEXEC);
 
-		if (ioctl(ppp->unit_fd, PPPIOCNEWUNIT, &ppp->ses.unit_idx) < 0) {
+		if (net->ppp_ioctl(ppp->unit_fd, PPPIOCNEWUNIT, &ppp->ses.unit_idx) < 0) {
 			log_ppp_error("ioctl(PPPIOCNEWUNIT): %s\n", strerror(errno));
 			goto exit_close_unit;
 		}
@@ -174,7 +174,7 @@ int __export connect_ppp_channel(struct ppp_t *ppp)
 		}
 	}
 
-	if (ioctl(ppp->chan_fd, PPPIOCCONNECT, &ppp->ses.unit_idx) < 0) {
+	if (net->ppp_ioctl(ppp->chan_fd, PPPIOCCONNECT, &ppp->ses.unit_idx) < 0) {
 		log_ppp_error("ioctl(PPPIOCCONNECT): %s\n", strerror(errno));
 		goto exit_close_unit;
 	}
@@ -185,17 +185,17 @@ int __export connect_ppp_channel(struct ppp_t *ppp)
 
 	ifr.ifr_mtu = ppp->mtu;
 	strcpy(ifr.ifr_name, ppp->ses.ifname);
-	if (ppp->mtu && ioctl(sock_fd, SIOCSIFMTU, &ifr)) {
+	if (ppp->mtu && net->sock_ioctl(SIOCSIFMTU, &ifr)) {
 		log_ppp_error("failed to set MTU: %s\n", strerror(errno));
 		goto exit_close_unit;
 	}
 
-	if (ppp->mru && ioctl(ppp->unit_fd, PPPIOCSMRU, &ppp->mru)) {
+	if (ppp->mru && net->ppp_ioctl(ppp->unit_fd, PPPIOCSMRU, &ppp->mru)) {
 		log_ppp_error("failed to set MRU: %s\n", strerror(errno));
 		goto exit_close_unit;
 	}
 
-	if (ioctl(sock_fd, SIOCGIFINDEX, &ifr)) {
+	if (net->sock_ioctl(SIOCGIFINDEX, &ifr)) {
 		log_ppp_error("ioctl(SIOCGIFINDEX): %s\n", strerror(errno));
 		goto exit_close_unit;
 	}
@@ -247,7 +247,7 @@ static void destablish_ppp(struct ppp_t *ppp)
 		sprintf(ifr.ifr_newname, "ppp%i", ppp->ses.unit_idx);
 		if (strcmp(ifr.ifr_newname, ppp->ses.ifname)) {
 			strncpy(ifr.ifr_name, ppp->ses.ifname, IFNAMSIZ);
-			if (ioctl(sock_fd, SIOCSIFNAME, &ifr)) {
+			if (net->sock_ioctl(SIOCSIFNAME, &ifr)) {
 				triton_md_unregister_handler(&ppp->unit_hnd, 1);
 				goto skip;
 			}
diff --git a/accel-pppd/ppp/ppp_ccp.c b/accel-pppd/ppp/ppp_ccp.c
index ceaccee2..f9e05e89 100644
--- a/accel-pppd/ppp/ppp_ccp.c
+++ b/accel-pppd/ppp/ppp_ccp.c
@@ -75,7 +75,7 @@ static int ccp_set_flags(int fd, int isopen, int isup)
 {
 	int flags;
 
-	if (ioctl(fd, PPPIOCGFLAGS, &flags)) {
+	if (net->ppp_ioctl(fd, PPPIOCGFLAGS, &flags)) {
 		log_ppp_error("ccp: failed to get flags: %s\n", strerror(errno));
 		return -1;
 	}
@@ -83,7 +83,7 @@ static int ccp_set_flags(int fd, int isopen, int isup)
 	flags &= ~(SC_CCP_OPEN | SC_CCP_UP);
 	flags |= (isopen ? SC_CCP_OPEN : 0) | (isup ? SC_CCP_UP : 0);
 
-	if (ioctl(fd, PPPIOCSFLAGS, &flags)) {
+	if (net->ppp_ioctl(fd, PPPIOCSFLAGS, &flags)) {
 		log_ppp_error("ccp: failed to set flags: %s\n", strerror(errno));
 		return -1;
 	}
diff --git a/accel-pppd/ppp/ppp_ifcfg.c b/accel-pppd/ppp/ppp_ifcfg.c
index f2d6bff1..5f767219 100644
--- a/accel-pppd/ppp/ppp_ifcfg.c
+++ b/accel-pppd/ppp/ppp_ifcfg.c
@@ -76,13 +76,13 @@ void ppp_ifup(struct ppp_t *ppp)
 		addr.sin_addr.s_addr = ppp->ses.ipv4->addr;
 		memcpy(&ifr.ifr_addr,&addr,sizeof(addr));
 
-		if (ioctl(sock_fd, SIOCSIFADDR, &ifr))
+		if (net->sock_ioctl(SIOCSIFADDR, &ifr))
 			log_ppp_error("ppp: failed to set IPv4 address: %s\n", strerror(errno));
 
 		addr.sin_addr.s_addr = ppp->ses.ipv4->peer_addr;
 		memcpy(&ifr.ifr_dstaddr,&addr,sizeof(addr));
 
-		if (ioctl(sock_fd, SIOCSIFDSTADDR, &ifr))
+		if (net->sock_ioctl(SIOCSIFDSTADDR, &ifr))
 			log_ppp_error("ppp: failed to set peer IPv4 address: %s\n", strerror(errno));
 	}
 
@@ -112,19 +112,19 @@ void ppp_ifup(struct ppp_t *ppp)
 		}
 	}
 
-	if (ioctl(sock_fd, SIOCGIFFLAGS, &ifr))
+	if (net->sock_ioctl(SIOCGIFFLAGS, &ifr))
 		log_ppp_error("ppp: failed to get interface flags: %s\n", strerror(errno));
 
 	ifr.ifr_flags |= IFF_UP | IFF_POINTOPOINT;
 
-	if (ioctl(sock_fd, SIOCSIFFLAGS, &ifr))
+	if (net->sock_ioctl(SIOCSIFFLAGS, &ifr))
 		log_ppp_error("ppp: failed to set interface flags: %s\n", strerror(errno));
 
 	if (ppp->ses.ipv4) {
 		np.protocol = PPP_IP;
 		np.mode = NPMODE_PASS;
 
-		if (ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
+		if (net->ppp_ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
 			log_ppp_error("ppp: failed to set NP (IPv4) mode: %s\n", strerror(errno));
 	}
 
@@ -132,7 +132,7 @@ void ppp_ifup(struct ppp_t *ppp)
 		np.protocol = PPP_IPV6;
 		np.mode = NPMODE_PASS;
 
-		if (ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
+		if (net->ppp_ioctl(ppp->unit_fd, PPPIOCSNPMODE, &np))
 			log_ppp_error("ppp: failed to set NP (IPv6) mode: %s\n", strerror(errno));
 	}
 
@@ -150,13 +150,13 @@ void __export ppp_ifdown(struct ppp_t *ppp)
 
 	memset(&ifr, 0, sizeof(ifr));
 	strcpy(ifr.ifr_name, ppp->ifname);
-	ioctl(sock_fd, SIOCSIFFLAGS, &ifr);
+	net->sock_ioctl(SIOCSIFFLAGS, &ifr);
 
 	if (ppp->ses.ipv4) {
 		memset(&addr, 0, sizeof(addr));
 		addr.sin_family = AF_INET;
 		memcpy(&ifr.ifr_addr,&addr,sizeof(addr));
-		ioctl(sock_fd, SIOCSIFADDR, &ifr);
+		net->sock_ioctl(SIOCSIFADDR, &ifr);
 	}
 
 	if (ppp->ses.ipv6) {
diff --git a/accel-pppd/session.c b/accel-pppd/session.c
index f68ce7b7..6f7972d5 100644
--- a/accel-pppd/session.c
+++ b/accel-pppd/session.c
@@ -89,7 +89,7 @@ int __export ap_session_starting(struct ap_session *ses)
 		memset(&ifr, 0, sizeof(ifr));
 		strcpy(ifr.ifr_name, ses->ifname);
 
-		if (ioctl(sock_fd, SIOCGIFINDEX, &ifr)) {
+		if (net->sock_ioctl(SIOCGIFINDEX, &ifr)) {
 			log_ppp_error("ioctl(SIOCGIFINDEX): %s\n", strerror(errno));
 			return -1;
 		}
-- 
cgit v1.2.3