summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/ipoe
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2016-04-04 22:49:27 +0300
committerDmitry Kozlov <xeb@mail.ru>2016-04-04 22:49:27 +0300
commit1972a7e5cd24d84204c14af365144d9d9d2bd972 (patch)
tree01c1612e305c85feea3cf9351ebbacc1101c39f4 /accel-pppd/ctrl/ipoe
parent263854f94b673516aac9db2a071989f2ee9845a6 (diff)
downloadaccel-ppp-1972a7e5cd24d84204c14af365144d9d9d2bd972.tar.gz
accel-ppp-1972a7e5cd24d84204c14af365144d9d9d2bd972.zip
ipoe: remove stale backup.c
Diffstat (limited to 'accel-pppd/ctrl/ipoe')
-rw-r--r--accel-pppd/ctrl/ipoe/CMakeLists.txt2
-rw-r--r--accel-pppd/ctrl/ipoe/backup.c285
-rw-r--r--accel-pppd/ctrl/ipoe/ipoe_netlink.c24
3 files changed, 21 insertions, 290 deletions
diff --git a/accel-pppd/ctrl/ipoe/CMakeLists.txt b/accel-pppd/ctrl/ipoe/CMakeLists.txt
index 16a6054..31cda71 100644
--- a/accel-pppd/ctrl/ipoe/CMakeLists.txt
+++ b/accel-pppd/ctrl/ipoe/CMakeLists.txt
@@ -5,7 +5,7 @@ SET(sources
dhcpv4.c
dhcpv4_options.c
ipoe_netlink.c
- backup.c
+# backup.c
arp.c
)
diff --git a/accel-pppd/ctrl/ipoe/backup.c b/accel-pppd/ctrl/ipoe/backup.c
deleted file mode 100644
index 4e72855..0000000
--- a/accel-pppd/ctrl/ipoe/backup.c
+++ /dev/null
@@ -1,285 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <net/ethernet.h>
-
-#include "triton.h"
-#include "events.h"
-#include "log.h"
-#include "memdebug.h"
-
-#include "ipoe.h"
-#include "backup.h"
-#include "ap_session_backup.h"
-
-#define IPOE_TAG_HWADDR 1
-#define IPOE_TAG_CLIENT_ID 2
-#define IPOE_TAG_RELAY_AGENT 3
-#define IPOE_TAG_XID 5
-#define IPOE_TAG_GIADDR 6
-#define IPOE_TAG_CALLING_SID 7
-#define IPOE_TAG_CALLED_SID 8
-#define IPOE_TAG_IFNAME 9
-#define IPOE_TAG_FLAGS 10
-#define IPOE_TAG_YIADDR 11
-#define IPOE_TAG_SIADDR 12
-#define IPOE_TAG_MASK 13
-#define IPOE_TAG_RELAY_SERVER_ID 14
-#define IPOE_TAG_LEASE_TIME 15
-#define IPOE_TAG_RENEW_TIME 16
-
-#define IPOE_TAG_IFINDEX 100
-
-#define IPOE_FLAG_IFCFG 0x01
-#define IPOE_FLAG_DHCP_ADDR 0x02
-#define IPOE_FLAG_RELAY_ADDR 0x04
-#define IPOE_FLAG_L4_REDIR 0x08
-#define IPOE_FLAG_L4_REDIR_SET 0x10
-
-#define add_tag(id, data, size) if (!backup_add_tag(m, id, 0, data, size)) return -1;
-#define add_tag_i(id, data, size) if (!backup_add_tag(m, id, 1, data, size)) return -1;
-
-static LIST_HEAD(ds_list);
-
-static void restore_complete(void);
-
-#ifdef USE_BACKUP
-static int session_save(struct ap_session *ses, struct backup_mod *m)
-{
- struct ipoe_session *conn = container_of(ses, typeof(*conn), ses);
- int flags = 0;
-
- if (conn->ifcfg)
- flags |= IPOE_FLAG_IFCFG;
-
- if (conn->dhcp_addr)
- flags |= IPOE_FLAG_DHCP_ADDR;
-
- if (conn->relay_addr)
- flags |= IPOE_FLAG_RELAY_ADDR;
-
- if (conn->l4_redirect)
- flags |= IPOE_FLAG_L4_REDIR;
-
- if (conn->l4_redirect_set)
- flags |= IPOE_FLAG_L4_REDIR_SET;
-
- add_tag(IPOE_TAG_HWADDR, conn->hwaddr, 6);
- add_tag(IPOE_TAG_CALLING_SID, ses->ctrl->calling_station_id, strlen(ses->ctrl->calling_station_id));
- add_tag(IPOE_TAG_CALLED_SID, ses->ctrl->called_station_id, strlen(ses->ctrl->called_station_id));
- add_tag(IPOE_TAG_XID, &conn->xid, 4);
- add_tag(IPOE_TAG_GIADDR, &conn->giaddr, 4);
- add_tag(IPOE_TAG_YIADDR, &conn->yiaddr, 4);
- add_tag(IPOE_TAG_SIADDR, &conn->siaddr, 4);
- add_tag(IPOE_TAG_MASK, &conn->mask, 1);
- add_tag(IPOE_TAG_FLAGS, &flags, 4);
- add_tag(IPOE_TAG_RELAY_SERVER_ID, &conn->relay_server_id, 4);
- add_tag(IPOE_TAG_LEASE_TIME, &conn->lease_time, 4);
- add_tag(IPOE_TAG_RENEW_TIME, &conn->renew_time, 4);
- add_tag(IPOE_TAG_IFNAME, conn->serv->ifname, strlen(conn->serv->ifname) + 1);
-
- if (conn->client_id)
- add_tag(IPOE_TAG_CLIENT_ID, conn->client_id->data, conn->client_id->len);
-
- if (conn->relay_agent)
- add_tag(IPOE_TAG_RELAY_AGENT, conn->relay_agent->data, conn->relay_agent->len);
-
- add_tag_i(IPOE_TAG_IFINDEX, &conn->ifindex, 4);
-
- return 0;
-}
-
-static int session_restore(struct ap_session *ses, struct backup_mod *m)
-{
- struct ipoe_session *conn = container_of(ses, typeof(*conn), ses);
-
-
- return 0;
-}
-
-static void set_dhcpv4_opt(struct dhcpv4_option **opt, struct backup_tag *t, uint8_t **ptr)
-{
- *opt = (struct dhcpv4_option *)(*ptr);
- (*opt)->len = t->size;
- memcpy((*opt)->data, t->data, t->size);
- (*ptr) += sizeof(**opt) + t->size;
-}
-
-static struct ap_session *ctrl_restore(struct backup_mod *m)
-{
- struct backup_tag *t;
- struct ipoe_session *ses;
- struct ipoe_serv *serv;
- struct backup_tag *ifname = NULL;
- int dlen = 0;
- uint8_t *ptr;
- struct ipoe_session_info *info;
- int flags = 0;
-
- //if (!m->data->internal)
- // return NULL;
-
- list_for_each_entry(t, &m->tag_list, entry) {
- switch(t->id) {
- case IPOE_TAG_CLIENT_ID:
- case IPOE_TAG_RELAY_AGENT:
- dlen += sizeof(struct dhcpv4_option) + t->size;
- break;
- case IPOE_TAG_IFNAME:
- ifname = t;
- break;
- }
- }
-
- if (!ifname)
- return NULL;
-
- serv = ipoe_find_serv((char *)ifname->data);
- if (!serv)
- return NULL;
-
- ses = ipoe_session_alloc();
- if (!ses)
- return NULL;
-
- if (dlen)
- ses->data = _malloc(dlen);
-
- ptr = ses->data;
-
- list_for_each_entry(t, &m->tag_list, entry) {
- switch(t->id) {
- case IPOE_TAG_HWADDR:
- memcpy(ses->hwaddr, t->data, 6);
- break;
- case IPOE_TAG_CALLING_SID:
- ses->ctrl.calling_station_id = _malloc(t->size + 1);
- memcpy(ses->ctrl.calling_station_id, t->data, t->size);
- ses->ctrl.calling_station_id[t->size] = 0;
- break;
- case IPOE_TAG_CALLED_SID:
- ses->ctrl.called_station_id = _malloc(t->size + 1);
- memcpy(ses->ctrl.called_station_id, t->data, t->size);
- ses->ctrl.called_station_id[t->size] = 0;
- break;
- case IPOE_TAG_XID:
- ses->xid = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_GIADDR:
- ses->giaddr = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_CLIENT_ID:
- set_dhcpv4_opt(&ses->client_id, t, &ptr);
- break;
- case IPOE_TAG_RELAY_AGENT:
- set_dhcpv4_opt(&ses->relay_agent, t, &ptr);
- dhcpv4_parse_opt82(ses->relay_agent, &ses->agent_circuit_id, &ses->agent_remote_id);
- break;
- case IPOE_TAG_IFINDEX:
- ses->ifindex = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_YIADDR:
- ses->yiaddr = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_SIADDR:
- ses->siaddr = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_MASK:
- ses->mask = *(uint8_t *)t->data;
- break;
- case IPOE_TAG_FLAGS:
- flags = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_RELAY_SERVER_ID:
- ses->relay_server_id = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_LEASE_TIME:
- ses->lease_time = *(uint32_t *)t->data;
- break;
- case IPOE_TAG_RENEW_TIME:
- ses->renew_time = *(uint32_t *)t->data;
- break;
- }
- }
-
- if (flags & IPOE_FLAG_IFCFG)
- ses->ifcfg = 1;
-
- if (flags & IPOE_FLAG_DHCP_ADDR) {
- dhcpv4_reserve_ip(ses->serv->dhcpv4, ses->yiaddr);
- ses->dhcp_addr = 1;
- }
-
- if (flags & IPOE_FLAG_RELAY_ADDR)
- ses->relay_addr = 1;
-
- if (flags & IPOE_FLAG_L4_REDIR)
- ses->l4_redirect = 1;
-
- if (flags & IPOE_FLAG_L4_REDIR_SET && m->data->internal)
- ses->l4_redirect = 1;
-
- ses->serv = serv;
-
- triton_context_register(&ses->ctx, &ses->ses);
- triton_context_wakeup(&ses->ctx);
-
- pthread_mutex_lock(&serv->lock);
- list_add_tail(&ses->entry, &serv->sessions);
- pthread_mutex_unlock(&serv->lock);
-
- if (ses->ifindex != -1) {
- list_for_each_entry(info, &ds_list, entry) {
- if (info->ifindex == ses->ifindex) {
- list_del(&info->entry);
- _free(info);
- break;
- }
- }
- }
-
- return &ses->ses;
-}
-
-static struct backup_module mod = {
- .id = MODID_IPOE,
- .save = session_save,
- .restore = session_restore,
- .ctrl_restore = ctrl_restore,
- .restore_complete = restore_complete,
-};
-#endif
-
-static void dump_sessions(void)
-{
- ipoe_nl_get_sessions(&ds_list);
-
-#ifndef USE_BACKUP
- restore_complete();
-#endif
-}
-
-static void restore_complete(void)
-{
- struct ipoe_session_info *info;
-
- while (!list_empty(&ds_list)) {
- info = list_entry(ds_list.next, typeof(*info), entry);
- ipoe_nl_delete(info->ifindex);
- list_del(&info->entry);
- _free(info);
- }
-}
-
-static void init(void)
-{
- dump_sessions();
-
-#ifdef USE_BACKUP
- backup_register_module(&mod);
-#endif
-}
-
-DEFINE_INIT(100, init);
-
diff --git a/accel-pppd/ctrl/ipoe/ipoe_netlink.c b/accel-pppd/ctrl/ipoe/ipoe_netlink.c
index 05ece5c..df13545 100644
--- a/accel-pppd/ctrl/ipoe/ipoe_netlink.c
+++ b/accel-pppd/ctrl/ipoe/ipoe_netlink.c
@@ -456,6 +456,21 @@ void ipoe_nl_delete(int ifindex)
rtnl_close(&rth);
}
+static void delete_sessions()
+{
+ struct ipoe_session_info *info;
+
+ LIST_HEAD(ds_list);
+ ipoe_nl_get_sessions(&ds_list);
+
+ while (!list_empty(&ds_list)) {
+ info = list_entry(ds_list.next, typeof(*info), entry);
+ ipoe_nl_delete(info->ifindex);
+ list_del(&info->entry);
+ _free(info);
+ }
+}
+
static void ipoe_up_handler(const struct sockaddr_nl *addr, struct nlmsghdr *h)
{
struct rtattr *tb[PKT_ATTR_MAX + 1];
@@ -614,6 +629,11 @@ static void init(void)
return;
}
+ delete_sessions();
+ ipoe_nl_del_exclude(0);
+ ipoe_nl_del_net(0);
+ ipoe_nl_delete_interfaces();
+
fcntl(rth.fd, F_SETFL, O_NONBLOCK);
fcntl(rth.fd, F_SETFD, fcntl(rth.fd, F_GETFD) | FD_CLOEXEC);
@@ -622,10 +642,6 @@ static void init(void)
triton_md_register_handler(&mc_ctx, &mc_hnd);
triton_md_enable_handler(&mc_hnd, MD_MODE_READ);
triton_context_wakeup(&mc_ctx);
-
- ipoe_nl_del_exclude(0);
- ipoe_nl_del_net(0);
- ipoe_nl_delete_interfaces();
}
DEFINE_INIT(19, init);