diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-04-29 16:56:56 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-04-29 16:56:56 -0700 |
commit | a8726835c9064a1f2c6a261b14c637950abdd2bc (patch) | |
tree | fc9add560d1919d3f2c050d3da486038fba9e355 /watchlink/netlink_send.cc | |
parent | e87f46b4abc10fe3fc59562d6be25fb96bce1970 (diff) | |
download | quagga-a8726835c9064a1f2c6a261b14c637950abdd2bc.tar.bz2 quagga-a8726835c9064a1f2c6a261b14c637950abdd2bc.tar.xz |
remove watchlink - no longer used
The watchlink daemon is no longer used, so code can be removed.
If it is needed for future changes it can be recovered from the
source code control system.
Diffstat (limited to 'watchlink/netlink_send.cc')
-rw-r--r-- | watchlink/netlink_send.cc | 318 |
1 files changed, 0 insertions, 318 deletions
diff --git a/watchlink/netlink_send.cc b/watchlink/netlink_send.cc deleted file mode 100644 index 3824c2ef..00000000 --- a/watchlink/netlink_send.cc +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Module: netlink_send.cc - * - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ -#include <errno.h> -#include <arpa/inet.h> -#include <linux/types.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <linux/netlink.h> -#include <linux/rtnetlink.h> -#include <syslog.h> - -#include <vector> -#include <string> -#include <iostream> - -#include "netlink_utils.hh" -#include "netlink_send.hh" - -using namespace std; - - -/** - * - * - **/ -NetlinkSend::NetlinkSend(bool debug) : _debug(debug) -{ -} - - -/** - * - * - **/ -NetlinkSend::~NetlinkSend() -{ -} - -/** - * - * - **/ -int -NetlinkSend::send_set(int sock, int ifindex, uint32_t local_addr, uint32_t addr, int mask_len, int type) -{ - int ret; - struct sockaddr_nl snl; - struct { - struct nlmsghdr n; - struct ifaddrmsg ifa; - char buf[256]; - } req; - - /* Check netlink socket. */ - if (sock < 0) { - syslog(LOG_ERR,"sock is not active, exiting"); - cerr << "sock is not active, exiting" << endl; - return -1; - } - - if (_debug) { - struct in_addr in; - in.s_addr = local_addr; - char *lbuf = inet_ntoa(in); - - in.s_addr = addr; - char *buf = inet_ntoa(in); - - char sbuf[1024]; - sprintf(sbuf, "NetlinkSend::send_set(): %d, %s/%d, to this address: %s, on interface: %d",type,buf,mask_len,lbuf,ifindex); - cout << sbuf << endl; - - syslog(LOG_INFO,sbuf); - } - - memset(&req, 0, sizeof(req)); - - req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - req.n.nlmsg_flags = NLM_F_REQUEST; - req.n.nlmsg_pid = getpid(); - req.n.nlmsg_type = type; - req.n.nlmsg_seq = time(NULL); - req.ifa.ifa_family = AF_INET; - req.ifa.ifa_index = ifindex; - req.ifa.ifa_prefixlen = mask_len; - - // addr = htonl( addr ); - addattr_l(&req.n, sizeof(req), IFA_LOCAL, &local_addr, sizeof(local_addr) ); - - in_addr_t broadcast_addr = ipv4_broadcast_addr(local_addr,mask_len); - addattr_l(&req.n, sizeof(req), IFA_BROADCAST, &broadcast_addr, sizeof(broadcast_addr) ); - - if (addr != -1 && local_addr != addr) { - addattr_l(&req.n, sizeof(req), IFA_ADDRESS, &addr, sizeof(addr) ); - } - - memset(&snl, 0, sizeof(snl)); - snl.nl_family = AF_NETLINK; - - ret = sendto (sock, (void*) &req, sizeof req, 0, - (struct sockaddr*) &snl, sizeof snl); - if (ret < 0) { - syslog(LOG_ERR,"netlink_send failed on send: %d, %d",ret,errno); - cerr << "netlink_send failed on send: " << ret << ", " << errno << endl; - return -1; - } - return 0; -} - -/** - * - * - **/ -int -NetlinkSend::send_set_route(int sock, int ifindex, uint32_t local_addr, uint32_t dst_addr, int mask_len, int type, int table, int rtn_type, int rt_scope) -{ - int ret; - struct sockaddr_nl snl; - struct { - struct nlmsghdr n; - struct rtmsg rt_message; - char buf[8192]; - } req; - req.rt_message.rtm_table = 0; - req.rt_message.rtm_protocol = 0; - req.rt_message.rtm_scope = 0; - req.rt_message.rtm_type = 0; - req.rt_message.rtm_src_len = 0; - req.rt_message.rtm_dst_len = 0; - req.rt_message.rtm_tos = 0; - - memset(&snl, 0, sizeof(snl)); - snl.nl_family = AF_NETLINK; - - /* Check netlink socket. */ - if (sock < 0) { - syslog(LOG_ERR,"sock is not active, exiting"); - cerr << "sock is not active, exiting" << endl; - return -1; - } - - if (_debug) { - struct in_addr in; - in.s_addr = local_addr; - char *lbuf = inet_ntoa(in); - - in.s_addr = dst_addr; - char *buf = inet_ntoa(in); - - char sbuf[1024]; - sprintf(sbuf, "NetlinkSend::send_set_route(): %d, %s/%d, to this address: %s, on interface: %d, for this table: ",type,buf,mask_len,lbuf,ifindex,table); - cout << sbuf << endl; - - syslog(LOG_INFO,sbuf); - } - - memset(&req, 0, sizeof(req)); - - req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); - if (type == RTM_NEWROUTE) { - req.n.nlmsg_flags = NLM_F_REQUEST|NLM_F_CREATE|NLM_F_EXCL; - } - else { - req.n.nlmsg_flags = NLM_F_REQUEST; - } - req.n.nlmsg_pid = getpid(); - req.n.nlmsg_type = type; - req.n.nlmsg_seq = time(NULL); - - req.rt_message.rtm_family = AF_INET; - req.rt_message.rtm_dst_len = mask_len; - req.rt_message.rtm_table = table; - if (type == RTM_NEWROUTE) { - req.rt_message.rtm_protocol = RTPROT_KERNEL; - if (rt_scope != -1) { - req.rt_message.rtm_scope = rt_scope;//RT_SCOPE_HOST; //will need to pass this in to get RT_SCOPE_HOST - } - if (rtn_type != -1) { - req.rt_message.rtm_type = rtn_type;//RTN_LOCAL; - } - } - else { - req.rt_message.rtm_scope = RT_SCOPE_NOWHERE; - req.rt_message.rtm_type = RTN_UNSPEC; - } - - addattr_l(&req.n, sizeof(req), RTA_PREFSRC, &local_addr, sizeof(local_addr)); - addattr_l(&req.n, sizeof(req), RTA_DST, &dst_addr, sizeof(dst_addr)); - addattr32(&req.n, sizeof(req), RTA_OIF, ifindex); - - if (_debug) { - cout << "NetlinkSend::send_set_route():" << endl; - cout << " interface: " << ifindex << endl; - cout << " type: " << string(req.n.nlmsg_type == RTM_NEWROUTE ? string("RTM_NEWROUTE") : string("RTM_DELROUTE")) << endl; - cout << " flags: " << req.n.nlmsg_flags << endl; - cout << " protocol: " << int(req.rt_message.rtm_protocol) << endl; - cout << " scope: " << int(req.rt_message.rtm_scope) << endl; - cout << " addr(s): " << local_addr << ", " << dst_addr << ", " << mask_len << ", " << int(req.rt_message.rtm_dst_len) << endl; - cout << endl; - } - - ret = sendto (sock, (void*) &req, sizeof req, 0, - (struct sockaddr*) &snl, sizeof snl); - if (ret < 0) { - syslog(LOG_ERR,"netlink_send_route failed on send: %d, %d",ret,errno); - cerr << "netlink_send_route failed on send: " << ret << ", " << errno << endl; - return -1; - } - return 0; -} - -/** - * - * - **/ -int -NetlinkSend::send_get(int sock, int type, int ifindex) -{ - int ret; - struct sockaddr_nl snl; - struct { - struct nlmsghdr n; - struct ifaddrmsg ifa; - char buf[256]; - } req; - - /* Check netlink socket. */ - if (sock < 0) { - syslog(LOG_ERR,"sock is not active, exiting"); - cerr << "sock is not active, exiting" << endl; - return -1; - } - - if (_debug) { - char sbuf[1024]; - sprintf(sbuf,"NetlinkSend::send_get(): type: %d, ifindex: %d",type,ifindex); - cout << sbuf << endl; - syslog(LOG_INFO,sbuf); - } - - memset(&req, 0, sizeof(req)); - - req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); - if (ifindex > -1) { - req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH; - } - else { - req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP; - } - req.n.nlmsg_pid = getpid(); - req.n.nlmsg_type = type; - req.n.nlmsg_seq = time(NULL); - req.ifa.ifa_family = AF_INET; - if (ifindex > -1) { - req.ifa.ifa_index = ifindex; - } - - /* - note bug right now in that all interfaces are provided back when a specific index is requested - */ - memset(&snl, 0, sizeof(snl)); - snl.nl_family = AF_NETLINK; - - ret = sendto (sock, (void*) &req, sizeof req, 0, - (struct sockaddr*) &snl, sizeof snl); - if (ret < 0) { - syslog(LOG_ERR,"netlink_send failed on send: %d, %d",ret,errno); - cerr << "netlink_send failed on send: " << ret << ", " << errno << endl; - return -1; - } - return 0; -} - -/** - * - * - **/ -int -NetlinkSend::addattr_l(struct nlmsghdr *n, int maxlen, int type, void *data, int alen) -{ - int len = RTA_LENGTH(alen); - struct rtattr *rta; - - if ((int)NLMSG_ALIGN(n->nlmsg_len) + len > maxlen) - return -1; - rta = (struct rtattr*)(((char*)n) + NLMSG_ALIGN(n->nlmsg_len)); - rta->rta_type = type; - rta->rta_len = len; - memcpy(RTA_DATA(rta), data, alen); - n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + len; - return 0; -} - -int -NetlinkSend::addattr32(struct nlmsghdr *n, int maxlen, int type, int data) -{ - int len; - struct rtattr *rta; - - len = RTA_LENGTH (4); - - if (NLMSG_ALIGN (n->nlmsg_len) + len > maxlen) - return -1; - - rta = (struct rtattr *) (((char *) n) + NLMSG_ALIGN (n->nlmsg_len)); - rta->rta_type = type; - rta->rta_len = len; - memcpy (RTA_DATA (rta), &data, 4); - n->nlmsg_len = NLMSG_ALIGN (n->nlmsg_len) + len; - - return 0; -} |