Diff for /embedtools/src/dwds.c between versions 1.1.2.10 and 1.1.2.13

version 1.1.2.10, 2010/10/28 15:56:06 version 1.1.2.13, 2010/11/02 02:25:46
Line 13  Usage() Line 13  Usage()
 {  {
         printf( "-= dWDS =- WiFi dynamic WDS service managment for VAP\n"          printf( "-= dWDS =- WiFi dynamic WDS service managment for VAP\n"
                 "=== %s === %s@%s ===\n\n"                  "=== %s === %s@%s ===\n\n"
                "  Syntax: dwds [options] <interface|any> [interface [...]]\n"                "  Syntax: dwds [options] <interface|any> [interface [ath0, ...]]\n"
                 "\n"                  "\n"
                 "\t-v\t\tVerbose ...\n"                  "\t-v\t\tVerbose ...\n"
                 "\t-f\t\tForeground, not demonize process ...\n"                  "\t-f\t\tForeground, not demonize process ...\n"
Line 58  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz Line 58  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz
         struct if_announcemsghdr *ifan;          struct if_announcemsghdr *ifan;
         const u_char *v;          const u_char *v;
         struct ether_addr bssid;          struct ether_addr bssid;
        char szStr[STRSIZ] = { 0 }, szCmd[MAXPATHLEN] = { 0 };        char szStr[STRSIZ] = { 0 }, szCmd[MAXPATHLEN] = { 0 }, szIdent[STRSIZ] = { 0 }, 
              szName[IFNAMSIZ] = { 0 };
         int f, stat;          int f, stat;
   
         assert(wds);          assert(wds);
Line 94  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz Line 95  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz
                                                 break;                                                  break;
                                         /* fall thru ... */                                          /* fall thru ... */
                                 case RTM_IEEE80211_LEAVE:                                  case RTM_IEEE80211_LEAVE:
                                        if (wifi_chkIface(ifan->ifan_name, ifs, nif) < 0)                                        if (!wifi_chkIface(ifan->ifan_name, ifs, nif))
                                                 break;                                                  break;
                                         memcpy(&bssid, V(ieee80211_leave_event)->iev_addr, ETHER_ADDR_LEN);                                          memcpy(&bssid, V(ieee80211_leave_event)->iev_addr, ETHER_ADDR_LEN);
                                         VERB(1) syslog(LOG_INFO, "BSSID:%s Station leave\n", ether_ntoa(&bssid));                                          VERB(1) syslog(LOG_INFO, "BSSID:%s Station leave\n", ether_ntoa(&bssid));
                                        if (!wifi_leaveWDS(bssid, wds)) {                                        if (!wifi_leaveWDS(bssid, wds, szName, IFNAMSIZ)) {
                                                 cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), 
                                                                 CFG(szIdent), STRSIZ, DWDS_NAME);
                                                 /* delete state file ... */                                                  /* delete state file ... */
                                                 v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("state_dir"));                                                  v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("state_dir"));
                                                if (v && strtol((char*) v, NULL, 0)) {                                                if (v) {
                                                         memset(szCmd, 0, STRSIZ);                                                          memset(szCmd, 0, STRSIZ);
                                                        snprintf(szCmd, MAXPATHLEN, "%s/%s-%s", (char*) v,                                                         snprintf(szCmd, MAXPATHLEN, "%s/%s-%s-%s", (char*) v, 
                                                                        ifan->ifan_name, ether_ntoa(&bssid));                                                                        szName, ether_ntoa(&bssid), szIdent);
                                                         unlink(szCmd);                                                          unlink(szCmd);
                                                         VERB(2) syslog(LOG_DEBUG, "Debug:: delete session name %s\n", szCmd);                                                          VERB(2) syslog(LOG_DEBUG, "Debug:: delete session name %s\n", szCmd);
                                                 }                                                  }
Line 113  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz Line 116  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz
                                                 cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("disassoc_event"),                                                   cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("disassoc_event"), 
                                                                 CFG(szStr), STRSIZ, NULL);                                                                  CFG(szStr), STRSIZ, NULL);
                                                 if (*szStr) {                                                  if (*szStr) {
                                                           cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), 
                                                                           CFG(szIdent), STRSIZ, DWDS_NAME);
                                                         memset(szCmd, 0, MAXPATHLEN);                                                          memset(szCmd, 0, MAXPATHLEN);
                                                        snprintf(szCmd, MAXPATHLEN, "%s %s %s", szStr,                                                         snprintf(szCmd, MAXPATHLEN, "%s %s %s %s", szStr, 
                                                                        ifan->ifan_name, ether_ntoa(&bssid));                                                                        szName, ether_ntoa(&bssid), szIdent);
                                                         VERB(3) syslog(LOG_DEBUG, "Debug:: Command line: %s\n", szCmd);                                                          VERB(3) syslog(LOG_DEBUG, "Debug:: Command line: %s\n", szCmd);
   
                                                         if ((stat = system(szCmd)))                                                          if ((stat = system(szCmd)))
Line 136  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz Line 141  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz
                                 case RTM_IEEE80211_WDS:                                  case RTM_IEEE80211_WDS:
                                         memcpy(&bssid, V(ieee80211_leave_event)->iev_addr, ETHER_ADDR_LEN);                                          memcpy(&bssid, V(ieee80211_leave_event)->iev_addr, ETHER_ADDR_LEN);
                                         VERB(1) syslog(LOG_INFO, "BSSID:%s WDS discovery\n", ether_ntoa(&bssid));                                          VERB(1) syslog(LOG_INFO, "BSSID:%s WDS discovery\n", ether_ntoa(&bssid));
                                        if (wifi_chkIface(ifan->ifan_name, ifs, nif) < 0)                                        if (!wifi_chkIface(ifan->ifan_name, ifs, nif))
                                                 break;                                                  break;
                                         if (!wifi_createWDS(ifan->ifan_name, bssid, wds)) {                                          if (!wifi_createWDS(ifan->ifan_name, bssid, wds)) {
                                                   cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), 
                                                                   CFG(szIdent), STRSIZ, DWDS_NAME);
                                                 /* create state file ... */                                                  /* create state file ... */
                                                 v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("state_dir"));                                                  v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("state_dir"));
                                                if (v && strtol((char*) v, NULL, 0)) {                                                if (v) {
                                                         memset(szCmd, 0, MAXPATHLEN);                                                          memset(szCmd, 0, MAXPATHLEN);
                                                        snprintf(szCmd, MAXPATHLEN, "%s/%s-%s", (char*) v,                                                         snprintf(szCmd, MAXPATHLEN, "%s/%s-%s-%s", (char*) v, 
                                                                        ifan->ifan_name, ether_ntoa(&bssid));                                                                        (*wds)->if_name, ether_ntoa(&bssid), szIdent);
                                                         f = open(szCmd, O_WRONLY | O_CREAT, 0644);                                                          f = open(szCmd, O_WRONLY | O_CREAT, 0644);
                                                         if (f != -1)                                                          if (f != -1)
                                                                 close(f);                                                                  close(f);
Line 156  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz Line 163  RtMsg(struct dwds_if **wds, struct rt_msghdr *msg, siz
                                                                 CFG(szStr), STRSIZ, NULL);                                                                  CFG(szStr), STRSIZ, NULL);
                                                 if (*szStr) {                                                  if (*szStr) {
                                                         memset(szCmd, 0, MAXPATHLEN);                                                          memset(szCmd, 0, MAXPATHLEN);
                                                        snprintf(szCmd, MAXPATHLEN, "%s %s %s", szStr,                                                         snprintf(szCmd, MAXPATHLEN, "%s %s %s %s", szStr, 
                                                                        ifan->ifan_name, ether_ntoa(&bssid));                                                                        (*wds)->if_name, ether_ntoa(&bssid), szIdent);
                                                         VERB(3) syslog(LOG_DEBUG, "Debug:: Command line: %s\n", szCmd);                                                          VERB(3) syslog(LOG_DEBUG, "Debug:: Command line: %s\n", szCmd);
   
                                                         if ((stat = system(szCmd)))                                                          if ((stat = system(szCmd)))
Line 258  main(int argc, char **argv) Line 265  main(int argc, char **argv)
         while (!Kill) {          while (!Kill) {
                 len = read(s, (void*) msg, sizeof msg);                  len = read(s, (void*) msg, sizeof msg);
                 if (len == -1) {                  if (len == -1) {
                        syslog(LOG_ERR, "Error:: read() #%d - %s\n", errno, strerror(errno));                        VERB(5) syslog(LOG_ERR, "Error:: read() #%d - %s\n", errno, strerror(errno));
                         Kill++;                          Kill++;
                 } else                  } else
                         RtMsg(&wds, (struct rt_msghdr*) msg, len);                          RtMsg(&wds, (struct rt_msghdr*) msg, len);

Removed from v.1.1.2.10  
changed lines
  Added in v.1.1.2.13


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>