|
@@ -22,11 +22,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-typedef struct {
|
|
|
|
|
- switch_data_t sw;
|
|
|
|
|
-}ns_handle_t;
|
|
|
|
|
-static ns_handle_t nsHandle;
|
|
|
|
|
-
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip, char *oid_str, int msgtype)
|
|
static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip, char *oid_str, int msgtype)
|
|
@@ -217,7 +212,7 @@ static int get_mac(char *ss, char *mac)
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
-static port_data_t* get_port(switch_data_t *sw, char *mac)
|
|
|
|
|
|
|
+static port_data_t* get_port(netswitch_data_t *sw, char *mac)
|
|
|
{
|
|
{
|
|
|
int i;
|
|
int i;
|
|
|
port_data_t *pt=NULL;
|
|
port_data_t *pt=NULL;
|
|
@@ -250,15 +245,15 @@ static char *get_string(netsnmp_variable_list *var)
|
|
|
|
|
|
|
|
return NULL;
|
|
return NULL;
|
|
|
}
|
|
}
|
|
|
-static void sw_init(switch_data_t *sw)
|
|
|
|
|
|
|
+static void sw_init(netswitch_data_t *sw)
|
|
|
{
|
|
{
|
|
|
int i;
|
|
int i;
|
|
|
- memset(sw, 0, sizeof(switch_data_t));
|
|
|
|
|
|
|
+ memset(sw, 0, sizeof(netswitch_data_t));
|
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
|
sw->port[i].id = -1;
|
|
sw->port[i].id = -1;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-static void sw_sync_mac_by_id(switch_data_t *dst, switch_data_t *src)
|
|
|
|
|
|
|
+static void sw_sync_mac_by_id(netswitch_data_t *dst, netswitch_data_t *src)
|
|
|
{
|
|
{
|
|
|
int i,id;
|
|
int i,id;
|
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
@@ -271,7 +266,7 @@ static void sw_sync_mac_by_id(switch_data_t *dst, switch_data_t *src)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-static int get_id_by_mac(switch_data_t *sw, port_data_t *pt)
|
|
|
|
|
|
|
+static int get_id_by_mac(netswitch_data_t *sw, port_data_t *pt)
|
|
|
{
|
|
{
|
|
|
int i;
|
|
int i;
|
|
|
|
|
|
|
@@ -287,7 +282,7 @@ static int get_id_by_mac(switch_data_t *sw, port_data_t *pt)
|
|
|
|
|
|
|
|
return -1;
|
|
return -1;
|
|
|
}
|
|
}
|
|
|
-static void sw_sync_ip_by_mac(switch_data_t *dst, switch_data_t *src)
|
|
|
|
|
|
|
+static void sw_sync_ip_by_mac(netswitch_data_t *dst, netswitch_data_t *src)
|
|
|
{
|
|
{
|
|
|
int i,id;
|
|
int i,id;
|
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
@@ -307,7 +302,7 @@ static void sw_sync_ip_by_mac(switch_data_t *dst, switch_data_t *src)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-static void sw_print(char *s, switch_data_t *sw)
|
|
|
|
|
|
|
+static void sw_print(char *s, netswitch_data_t *sw)
|
|
|
{
|
|
{
|
|
|
int i,id,flag=0;
|
|
int i,id,flag=0;
|
|
|
port_data_t *pt=NULL;
|
|
port_data_t *pt=NULL;
|
|
@@ -366,11 +361,11 @@ static void sw_print(char *s, switch_data_t *sw)
|
|
|
3. 第三种情况比较特殊,对于net-snmp不熟的也可能会范理解上的错误。
|
|
3. 第三种情况比较特殊,对于net-snmp不熟的也可能会范理解上的错误。
|
|
|
使用snmpget而忘记了添加OID结尾的实例标识符,net-snmp则会报出“No Such Instance currently exists at this OID”的错误。
|
|
使用snmpget而忘记了添加OID结尾的实例标识符,net-snmp则会报出“No Such Instance currently exists at this OID”的错误。
|
|
|
*/
|
|
*/
|
|
|
-static int sw_get(switch_data_t *sw)
|
|
|
|
|
|
|
+static int sw_get(netswitch_data_t *sw)
|
|
|
{
|
|
{
|
|
|
int i,j,find=0;
|
|
int i,j,find=0;
|
|
|
char temp[100];
|
|
char temp[100];
|
|
|
- switch_data_t tmp;
|
|
|
|
|
|
|
+ netswitch_data_t tmp;
|
|
|
netsnmp_variable_list *var,*pvar;
|
|
netsnmp_variable_list *var,*pvar;
|
|
|
|
|
|
|
|
char *dot1dTpFdbEntryOid="1.3.6.1.2.1.17.4.3.1";
|
|
char *dot1dTpFdbEntryOid="1.3.6.1.2.1.17.4.3.1";
|
|
@@ -505,36 +500,40 @@ static int sw_get(switch_data_t *sw)
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
-static int sw_chk(switch_data_t *sw1, switch_data_t *sw2, uint32_t *mask)
|
|
|
|
|
|
|
+static int sw_chk(netswitch_data_t *sw1, netswitch_data_t *sw2, netswitch_evts_t *evts)
|
|
|
{
|
|
{
|
|
|
int i,flag=0;
|
|
int i,flag=0;
|
|
|
- uint32_t mask2=0;
|
|
|
|
|
|
|
|
|
|
|
|
+ memset(evts, 0, sizeof(netswitch_evts_t));
|
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
|
if(sw1->port[i].up != sw2->port[i].up) {
|
|
if(sw1->port[i].up != sw2->port[i].up) {
|
|
|
- mask2 |= 1<<i;
|
|
|
|
|
if(sw2->port[i].up) {
|
|
if(sw2->port[i].up) {
|
|
|
LOGD("____ port %d plug in\n", i+1);
|
|
LOGD("____ port %d plug in\n", i+1);
|
|
|
|
|
+ evts->evt[i].cab = EVT_CAB_IN;
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
LOGD("____ port %d plug out\n", i+1);
|
|
LOGD("____ port %d plug out\n", i+1);
|
|
|
|
|
+ evts->evt[i].cab = EVT_CAB_OUT;
|
|
|
}
|
|
}
|
|
|
- flag |= NW_FLAG_IO;
|
|
|
|
|
|
|
+ flag = 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(strlen(sw2->port[i].mac) && strcmp(sw1->port[i].mac, sw2->port[i].mac)) {
|
|
if(strlen(sw2->port[i].mac) && strcmp(sw1->port[i].mac, sw2->port[i].mac)) {
|
|
|
LOGD("____ port %d mac changed from: %s, to: %s\n", i+1, sw1->port[i].mac, sw2->port[i].mac);
|
|
LOGD("____ port %d mac changed from: %s, to: %s\n", i+1, sw1->port[i].mac, sw2->port[i].mac);
|
|
|
- flag |= NW_FLAG_MAC;
|
|
|
|
|
|
|
+ evts->evt[i].dev = EVT_MAC_CHG;
|
|
|
|
|
+ flag = 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(strlen(sw2->port[i].ip) && strcmp(sw1->port[i].ip, sw2->port[i].ip)) {
|
|
if(strlen(sw2->port[i].ip) && strcmp(sw1->port[i].ip, sw2->port[i].ip)) {
|
|
|
LOGD("____ port %d ip changed from: %s, to: %s\n", i+1, sw1->port[i].ip, sw2->port[i].ip);
|
|
LOGD("____ port %d ip changed from: %s, to: %s\n", i+1, sw1->port[i].ip, sw2->port[i].ip);
|
|
|
- flag |= NW_FLAG_IP;
|
|
|
|
|
|
|
+ evts->evt[i].dev = EVT_IP_CHG;
|
|
|
|
|
+ flag = 1;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
return flag;
|
|
return flag;
|
|
|
}
|
|
}
|
|
|
-static int sw_cpy(switch_data_t *dst, switch_data_t *src)
|
|
|
|
|
|
|
+static int sw_cpy(netswitch_data_t *dst, netswitch_data_t *src)
|
|
|
{
|
|
{
|
|
|
int i;
|
|
int i;
|
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
for(i=0; i<SW_PORT_MAX; i++) {
|
|
@@ -550,32 +549,76 @@ static int sw_cpy(switch_data_t *dst, switch_data_t *src)
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
static sqlite3* get_db(void)
|
|
static sqlite3* get_db(void)
|
|
|
{
|
|
{
|
|
|
return __globalDeviceManage.db;
|
|
return __globalDeviceManage.db;
|
|
|
}
|
|
}
|
|
|
|
|
+static int get_prod_id(void)
|
|
|
|
|
+{
|
|
|
|
|
+ return __globalDeviceManage._global_device_info->product_id;
|
|
|
|
|
+}
|
|
|
|
|
+static int sw_alarm(netswitch_evts_t *evts, netswitch_data_t *old, netswitch_data_t *new)
|
|
|
|
|
+{
|
|
|
|
|
+ int r=-1;
|
|
|
|
|
+ int i,flag=0;
|
|
|
|
|
+ time_t now;
|
|
|
|
|
+ char temp[200];
|
|
|
|
|
+ char time_str[100];
|
|
|
|
|
+ char alarm_str[2000];
|
|
|
|
|
+
|
|
|
|
|
+ time(&now);
|
|
|
|
|
+ strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", localtime(&now));
|
|
|
|
|
+
|
|
|
|
|
+ alarm_str[0] = 0;
|
|
|
|
|
+ for(i=0; i<SW_PORT_MAX; i++) {
|
|
|
|
|
+ if(i==INTER_USE_PORT) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ temp[0] = 0;
|
|
|
|
|
+ if(evts->evt[i].cab) {
|
|
|
|
|
+ flag = 1;
|
|
|
|
|
+ snprintf(temp, sizeof(temp), "port[%d] plug %s\n", i+1, (evts->evt[i].cab==EVT_CAB_IN)?"in":"out");
|
|
|
|
|
+ strcat(alarm_str, temp);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(evts->evt[i].dev) {
|
|
|
|
|
+ flag = 1;
|
|
|
|
|
+ if(evts->evt[i].dev==EVT_IP_CHG) {
|
|
|
|
|
+ snprintf(temp, sizeof(temp), "port[%d] device ip changed from %s to %s\n", i+1, old->port[i].ip, new->port[i].ip);
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ snprintf(temp, sizeof(temp), "port[%d] device mac changed from %s to %s\n", i+1, old->port[i].mac, new->port[i].mac);
|
|
|
|
|
+ }
|
|
|
|
|
+ strcat(alarm_str, temp);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(flag) {
|
|
|
|
|
+ r = dev_insert_alarm_info(get_db(), get_prod_id(), 9, time_str, alarm_str);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return r;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+static netswitch_data_t sw,sw2;
|
|
|
static void* sw_thread(void *arg)
|
|
static void* sw_thread(void *arg)
|
|
|
{
|
|
{
|
|
|
int r;
|
|
int r;
|
|
|
- uint32_t mask;
|
|
|
|
|
- thread_handle_t *h=(thread_handle_t*)arg;
|
|
|
|
|
- ns_handle_t *nh=(ns_handle_t*)h->arg;
|
|
|
|
|
- switch_data_t sw_tmp;
|
|
|
|
|
- switch_data_t *sw=&nh->sw;
|
|
|
|
|
- switch_data_t *sw2=&sw_tmp;
|
|
|
|
|
|
|
+ netswitch_evts_t evts;
|
|
|
|
|
+ thread_handle_t *h=(thread_handle_t*)arg;
|
|
|
sqlite3 *db=get_db();;
|
|
sqlite3 *db=get_db();;
|
|
|
|
|
|
|
|
- dev_switch_init(db, sw);
|
|
|
|
|
- *sw2 = *sw;
|
|
|
|
|
|
|
+ dev_switch_init(db, &sw);
|
|
|
|
|
+ sw2 = sw;
|
|
|
|
|
|
|
|
SOCK_STARTUP;
|
|
SOCK_STARTUP;
|
|
|
while(h->quit==0) {
|
|
while(h->quit==0) {
|
|
|
- r = sw_get(sw2);
|
|
|
|
|
- if(r==0 && sw_chk(sw, sw2, &mask)) {
|
|
|
|
|
- sw_cpy(sw, sw2);
|
|
|
|
|
|
|
+ r = sw_get(&sw);
|
|
|
|
|
+ if(r==0 && sw_chk(&sw, &sw2, &evts)) {
|
|
|
|
|
+ sw_alarm(&evts, &sw, &sw2);
|
|
|
|
|
+ sw_cpy(&sw, &sw2);
|
|
|
}
|
|
}
|
|
|
usleep(1000);
|
|
usleep(1000);
|
|
|
}
|
|
}
|
|
@@ -586,9 +629,7 @@ static void* sw_thread(void *arg)
|
|
|
|
|
|
|
|
int netswitch_init(void)
|
|
int netswitch_init(void)
|
|
|
{
|
|
{
|
|
|
- ns_handle_t *h=&nsHandle;
|
|
|
|
|
-
|
|
|
|
|
- thread_start(THREAD_ID_SWITCH, sw_thread, h, 10*MB, 0);
|
|
|
|
|
|
|
+ thread_start(THREAD_ID_SWITCH, sw_thread, NULL, 10*MB, 0);
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
@@ -601,5 +642,13 @@ int netswitch_deinit(void)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+int netswitch_get(netswitch_data_t *data)
|
|
|
|
|
+{
|
|
|
|
|
+ if(!data) {
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+ *data = sw;
|
|
|
|
|
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
|