|
xorp
|
00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*- 00002 00003 // Copyright (c) 2001-2011 XORP, Inc and Others 00004 // 00005 // This program is free software; you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License, Version 2, June 00007 // 1991 as published by the Free Software Foundation. Redistribution 00008 // and/or modification of this program under the terms of any other 00009 // version of the GNU General Public License is not permitted. 00010 // 00011 // This program is distributed in the hope that it will be useful, but 00012 // WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details, 00014 // see the GNU General Public License, Version 2, a copy of which can be 00015 // found in the XORP LICENSE.gpl file. 00016 // 00017 // XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA; 00018 // http://xorp.net 00019 00020 // $XORP: xorp/fea/data_plane/ifconfig/ifconfig_get_netlink_socket.hh,v 1.11 2008/10/02 21:57:05 bms Exp $ 00021 00022 #ifndef __FEA_DATA_PLANE_IFCONFIG_IFCONFIG_GET_NETLINK_SOCKET_HH__ 00023 #define __FEA_DATA_PLANE_IFCONFIG_IFCONFIG_GET_NETLINK_SOCKET_HH__ 00024 00025 #include <xorp_config.h> 00026 00027 #ifdef HAVE_NETLINK_SOCKETS 00028 00029 #include "fea/ifconfig_get.hh" 00030 #include "fea/data_plane/control_socket/netlink_socket.hh" 00031 00032 00033 class IfConfigGetNetlinkSocket : public IfConfigGet, 00034 public NetlinkSocket { 00035 public: 00042 IfConfigGetNetlinkSocket(FeaDataPlaneManager& fea_data_plane_manager); 00043 00047 virtual ~IfConfigGetNetlinkSocket(); 00048 00055 virtual int start(string& error_msg); 00056 00063 virtual int stop(string& error_msg); 00064 00071 virtual int pull_config(const IfTree* local_cfg, IfTree& iftree); 00072 00073 00074 virtual bool can_pull_one() { return can_get_single != 0; } 00075 00078 virtual int pull_config_one(IfTree& iftree, const char* ifname, int if_index); 00079 00093 static int parse_buffer_netlink_socket(IfConfig& ifconfig, IfTree& iftree, 00094 const vector<uint8_t>& buffer) { 00095 bool modified = false; 00096 int nl_errno = 0; 00097 return parse_buffer_netlink_socket(ifconfig, iftree, buffer, modified, nl_errno); 00098 } 00099 00102 static int parse_buffer_netlink_socket(IfConfig& ifconfig, IfTree& iftree, 00103 const vector<uint8_t>& buffer, 00104 bool& modified, int& nl_errno); 00105 00106 private: 00107 int read_config(const IfTree* local_config, IfTree& iftree); 00108 int read_config_all(IfTree& iftree); 00109 int read_config_one(IfTree& iftree, const char* ifname, int if_index, 00110 int& nl_errno); 00111 int try_read_config_one(IfTree& iftree, const char* ifname, int if_index); 00112 00113 int can_get_single; 00114 00115 NetlinkSocketReader _ns_reader; 00116 }; 00117 00118 #endif 00119 #endif // __FEA_DATA_PLANE_IFCONFIG_IFCONFIG_GET_NETLINK_SOCKET_HH__