From b7e34d6ddeb428361513c9b9b88fa0291beeb7f3 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sat, 5 Mar 2016 22:10:35 +0000 Subject: [PATCH 01/15] Added some comments. FossilOrigin-Name: 04f80317574a45bfd705dc38137f421eacc055ae76c51f9648f2ca46b27793fd --- src/cw/cw.h | 14 +++++++++++++- src/cw/lw.h | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/cw/cw.h b/src/cw/cw.h index 9250514f..817ec953 100644 --- a/src/cw/cw.h +++ b/src/cw/cw.h @@ -16,7 +16,6 @@ */ - /* Use some macros from LWAPP */ /** @@ -43,9 +42,22 @@ */ #define cw_put_data lw_put_data +/** + * Put a bstr_t object + * see #lw_put_bstr + */ #define cw_put_bstr lw_put_bstr + +/** + * Put bstr16_t object + * see #lw_put_bstr16 + */ #define cw_put_bstr16 lw_put_bstr16 +/** + * Set dword + * see #lw_set_dword + */ #define cw_set_dword lw_set_dword #define cw_get_byte lw_get_byte diff --git a/src/cw/lw.h b/src/cw/lw.h index f3e61199..203a78ca 100644 --- a/src/cw/lw.h +++ b/src/cw/lw.h @@ -50,6 +50,10 @@ #define lw_set_word(dst,b) \ (*((uint16_t*)(dst)) = htons(w)) +/** + * Same as #lw_put_dword, but the return value + * is unspecified. + */ #define lw_set_dword(dst,dw)\ (*((uint32_t*)(dst)) = htonl(dw)) From f8f02e05ac2adabad0bc2fd12f7546ae894558de Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 09:04:21 +0000 Subject: [PATCH 02/15] Added documentation, removed contitional ipv6 support. FossilOrigin-Name: b187e4014bc965bb64296ca3813ffe0e786f9db8061d74cbe505328eacf3128e --- src/cw/sock_setport.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/src/cw/sock_setport.c b/src/cw/sock_setport.c index bcd38bba..8ec25d39 100644 --- a/src/cw/sock_setport.c +++ b/src/cw/sock_setport.c @@ -1,21 +1,59 @@ +/* + This file is part of actube. + + actube is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + libcapwap is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . + +*/ + #include "sock.h" #include #include +/** + * @file + * @brief implements sock_setport + */ + +/** + * @addtogroup SOCK + * @{ + */ + +/** + * Set the port number of a sockaddr + * @param addr sockaddr where the port will be set + * @param port number + * @return 1 if successful, otherwise 0 + * Ports can only be set for sockaddrs of type AF_INET and AF_INET6 + */ int sock_setport(struct sockaddr *addr, int port) { switch (addr->sa_family){ case AF_INET: ((struct sockaddr_in*)addr)->sin_port=htons(port); break; -#ifdef WITH_IPV6 case AF_INET6: ((struct sockaddr_in6*)addr)->sin6_port=htonl(port); break; -#endif default: return 0; } return 1; } + +/** + * @} + */ + From 370476b921f76ef4e83fed37012254eeceb6c3e2 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 09:12:29 +0000 Subject: [PATCH 03/15] Fixed wrong prot size for IPv6 FossilOrigin-Name: b113c728b2a94fa9f99e3267ac2c3ac843269156bca5487018e5e4330f5b9ffe --- src/cw/sock_setport.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cw/sock_setport.c b/src/cw/sock_setport.c index 8ec25d39..e5df2643 100644 --- a/src/cw/sock_setport.c +++ b/src/cw/sock_setport.c @@ -45,7 +45,7 @@ int sock_setport(struct sockaddr *addr, int port) ((struct sockaddr_in*)addr)->sin_port=htons(port); break; case AF_INET6: - ((struct sockaddr_in6*)addr)->sin6_port=htonl(port); + ((struct sockaddr_in6*)addr)->sin6_port=htons(port); break; default: return 0; From 2e4eafc44a3fefc65e9af577ba5f8fa0aacb2ae6 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 09:30:04 +0000 Subject: [PATCH 04/15] Added comments, fixed formatting for IPv6 with port number. FossilOrigin-Name: 3811a844e550a8d4095298c5bab3b32012f60cadcdbbc21d2153dbedf8056b96 --- src/cw/sock_addrtostr.c | 70 +++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/src/cw/sock_addrtostr.c b/src/cw/sock_addrtostr.c index f4972c43..5dbe6fda 100644 --- a/src/cw/sock_addrtostr.c +++ b/src/cw/sock_addrtostr.c @@ -1,7 +1,7 @@ /* - This file is part of libcapwap. + This file is part of actube. - libcapwap is free software: you can redistribute it and/or modify + actube is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -15,6 +15,17 @@ along with Foobar. If not, see . */ + +/** + * @file + * @brief implements sock_addrtostr + */ + +/** + * @addtogroup sock + * @{ + */ + #include #include @@ -32,40 +43,40 @@ #include "sock.h" -/* -void sock_hwaddrtostr(const uint8_t *haddr,int len,char *dst) +/** + * Convert a struct sockaddr int to a human readable string. + * @param sa sockaddr to convert + * @param s Destination buffer + * @param maxlen Size of destination buffer + * @param addport If true then the port number wil be added to the output + * Works only for sockaddrs of type AF_INET, AF_INET6, AF_PACKET, AF_LINK. + */ +char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen,int addport) { - int i; - for (i=0; isa_family) { case AF_INET: - inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), s, maxlen); - port = ((struct sockaddr_in *)sa)->sin_port; - if (addport) - sprintf(s,"%s:%i",s,ntohs(port)); + inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), d, maxlen); + if (addport){ + port = ((struct sockaddr_in *)sa)->sin_port; + sprintf(s,"%s:%i",d,ntohs(port)); + } else - sprintf(s,"%s",s); + sprintf(s,"%s",d); break; case AF_INET6: - inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), s, maxlen); - break; + inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), d, maxlen); + if (addport){ + port = ((struct sockaddr_in6 *)sa)->sin6_port; + sprintf(s,"[%s]:%i",d,ntohs(port)); + } + else + sprintf(s,"%s",d); + break; #ifdef AF_LINK case AF_LINK: { @@ -99,3 +110,8 @@ char *sock_strsockaddr(const struct sockaddr *sa, char *s, size_t maxlen,int add } return s; } + +/** + * @} + */ + From d0d34deaad94635edae57edf37507f7f52923e0a Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:00:41 +0000 Subject: [PATCH 05/15] Removed some out-commented code, updated license. FossilOrigin-Name: 7487e615b6426fe0843a5ef243ad76460b8cdc2b17b585f138748eea0e62c0a1 --- src/cw/conn_send_packet.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/cw/conn_send_packet.c b/src/cw/conn_send_packet.c index 28e810b1..38261440 100644 --- a/src/cw/conn_send_packet.c +++ b/src/cw/conn_send_packet.c @@ -1,7 +1,7 @@ /* - This file is part of libcapwap. + This file is part of actube. - libcapwap is free software: you can redistribute it and/or modify + actube is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -28,14 +28,6 @@ int conn_send_packet(struct conn * conn, const uint8_t * buffer, int len) { -/* -#ifdef WITH_CW_LOG_DEBUG - char addrstr[64]; - sock_addrtostr((struct sockaddr*)&conn->addr,addrstr,64); - cw_log_debug1("Sending packet to %s, len=%d",addrstr,len); - cw_log_debug2_dump(buffer,len,"Packet data for packet, sent to %s",addrstr); -#endif -*/ int n; while((n=sendto( conn->sock, buffer, len, 0, (struct sockaddr*)&conn->addr, @@ -43,6 +35,8 @@ int conn_send_packet(struct conn * conn, const uint8_t * buffer, int len) if(errno == EINTR) continue; + + return n; } From 5e58d45233904e771ff4610e4f63750deb44bac4 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:03:55 +0000 Subject: [PATCH 06/15] Added some comments FossilOrigin-Name: f30fe7913a468e8b2ad80f478a8d2ec45d9cdf5aa0011fd48735ac99b4f73759 --- src/cw/aciplist.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cw/aciplist.c b/src/cw/aciplist.c index 45bb65fd..622ff0c5 100644 --- a/src/cw/aciplist.c +++ b/src/cw/aciplist.c @@ -16,6 +16,10 @@ */ +/** + * @file + * @brief Implements some aciplist functions + */ #include #include @@ -69,10 +73,12 @@ static void acip_del(void *d) free(d); } +/** + * Create a cw_aciplist_t object + * @return The created aciplist or NULL if an error has occured. + */ cw_aciplist_t cw_aciplist_create() { return avltree_create(acip_cmp, acip_del); } - - From 70e0756a6a55b6bb00b4ac445bb7289ed25df610 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:04:34 +0000 Subject: [PATCH 07/15] Handles now both IPv4 and IPv6 Function should be renamed FossilOrigin-Name: 6a79cd856a810895a4ef8499e210e0fb7f9338e9ce7a1f173daa218e1763535c --- src/cw/cw_in_capwap_control_ipv4_address.c | 29 +++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/cw/cw_in_capwap_control_ipv4_address.c b/src/cw/cw_in_capwap_control_ipv4_address.c index 1e5f49e4..ebe6cb83 100644 --- a/src/cw/cw_in_capwap_control_ipv4_address.c +++ b/src/cw/cw_in_capwap_control_ipv4_address.c @@ -36,13 +36,30 @@ int cw_in_capwap_control_ipv4_address(struct conn *conn, struct cw_action_in *a, return 0; } - struct sockaddr_in addr; - memcpy(&addr.sin_addr,data,4); - addr.sin_family=AF_INET; - sock_setport((struct sockaddr*)&addr,CAPWAP_CONTROL_PORT); - memcpy(&acip->ip,&addr,sizeof(addr)); + + if (a->elem_id == CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS) { + struct sockaddr_in addr; + memcpy(&addr.sin_addr,data,4); + addr.sin_family=AF_INET; + sock_setport((struct sockaddr*)&addr,CAPWAP_CONTROL_PORT); + memcpy(&acip->ip,&addr,sizeof(addr)); + acip->wtp_count = cw_get_word(data+4); + } + + if (a->elem_id == CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS) { + struct sockaddr_in6 addr; + memset (&addr,0,sizeof(addr)); + memcpy(&addr.sin6_addr,data,16); + addr.sin6_family=AF_INET6; + sock_setport((struct sockaddr*)&addr,CAPWAP_CONTROL_PORT); + memcpy(&acip->ip,&addr,sizeof(addr)); + acip->wtp_count = cw_get_word(data+16); + } + + + + - acip->wtp_count = cw_get_word(data+4); cw_aciplist_replace(list,acip); From 2d5c4ab3605e942b25c704e29420dc44573853ba Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:06:23 +0000 Subject: [PATCH 08/15] Added comments FossilOrigin-Name: cff820c5c88db1039126df959766ef4e9269b2cd01b91c34bd332f0fd33b9dc9 --- src/cw/dtls_gnutls_bio.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cw/dtls_gnutls_bio.c b/src/cw/dtls_gnutls_bio.c index 9ddae9f1..3afc6b16 100644 --- a/src/cw/dtls_gnutls_bio.c +++ b/src/cw/dtls_gnutls_bio.c @@ -15,6 +15,13 @@ along with Foobar. If not, see . */ + + +/** + * @file + * @brief DTLS functions specific to gnutls + */ + #include #include @@ -42,7 +49,6 @@ ssize_t dtls_gnutls_bio_read(gnutls_transport_ptr_t b, void *out, size_t maxlen) ssize_t dtls_gnutls_bio_write(gnutls_transport_ptr_t b, const void *data, size_t len) { - struct conn *conn = (struct conn*)b; return dtls_bio_write(conn,data,len); } From e51d715b8b48511039014e7636171142762b7825 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:07:25 +0000 Subject: [PATCH 09/15] re-indented FossilOrigin-Name: 7973b2fa759f3820acf6a79727e3c8969b5f81b3813a8a076bdd61803d5ad6ee --- src/cw/dtls_gnutls_connect.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/cw/dtls_gnutls_connect.c b/src/cw/dtls_gnutls_connect.c index 619ff7d2..a77c8af0 100644 --- a/src/cw/dtls_gnutls_connect.c +++ b/src/cw/dtls_gnutls_connect.c @@ -13,36 +13,37 @@ int dtls_gnutls_connect(struct conn *conn) { - struct dtls_gnutls_data * d; - d = dtls_gnutls_data_create(conn,GNUTLS_CLIENT | GNUTLS_DATAGRAM | GNUTLS_NONBLOCK); + struct dtls_gnutls_data *d; + d = dtls_gnutls_data_create(conn, + GNUTLS_CLIENT | GNUTLS_DATAGRAM | GNUTLS_NONBLOCK); -// gnutls_dh_set_prime_bits(d->session, 512); +// gnutls_dh_set_prime_bits(d->session, 512); #if GNUTLS_VERSION_NUMBER >= 0x030100 - gnutls_handshake_set_timeout(d->session,GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); + gnutls_handshake_set_timeout(d->session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); - gnutls_dtls_set_data_mtu(d->session,1500); + gnutls_dtls_set_data_mtu(d->session, 1500); #endif - gnutls_dtls_set_mtu(d->session,1500); + gnutls_dtls_set_mtu(d->session, 1500); - int rc; + int rc; do { rc = gnutls_handshake(d->session); - }while (rc==GNUTLS_E_AGAIN); + } while (rc == GNUTLS_E_AGAIN); - - if (rc < 0){ - cw_log(LOG_ERR,"Can't connect: %s",gnutls_strerror(rc)); + + if (rc < 0) { + cw_log(LOG_ERR, "DTLS (gnutls) Can't connect to %s: %s", + sock_addr2str(&conn->addr), gnutls_strerror(rc)); return 0; } - cw_dbg(DBG_DTLS,"Handshake with %s successful",sock_addr2str(&conn->addr)); + cw_dbg(DBG_DTLS, "Handshake with %s successful", sock_addr2str(&conn->addr)); - conn->dtls_data=d; + conn->dtls_data = d; conn->read = dtls_gnutls_read; conn->write = dtls_gnutls_write; - + return 1; } - From 747dc5e1c2468f432f1342a11fc5aa7722f04599 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:07:49 +0000 Subject: [PATCH 10/15] Added comments. FossilOrigin-Name: aed38b36b4f76bf44e7af2cf877c6fed1026a8ef599e69b567316c960f59037a --- src/cw/mavl.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cw/mavl.h b/src/cw/mavl.h index dbf28f20..64c7b063 100644 --- a/src/cw/mavl.h +++ b/src/cw/mavl.h @@ -47,9 +47,13 @@ * Defines the structure of an AVL Node. */ struct mavlnode { + /** Pointer to data, thant belongs to the node */ void *data; + /** Pointer to left son*/ struct mavlnode *left; + /** Pointer to right son*/ struct mavlnode *right; + /** AVL balance */ int bal; }; From 130df27488b324bada8593be613df2c1ecd040c1 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:08:16 +0000 Subject: [PATCH 11/15] Added comments FossilOrigin-Name: 2aa841059ef11738f97159e92b1e9ae98b304a7a2fce7e98d22a5ca4b3ee0bd0 --- src/cw/sock.h | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/cw/sock.h b/src/cw/sock.h index 43faefad..409f2532 100644 --- a/src/cw/sock.h +++ b/src/cw/sock.h @@ -1,7 +1,7 @@ /* - This file is part of libcapwap. + This file is part of actube. - libcapwap is free software: you can redistribute it and/or modify + actube is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -16,6 +16,7 @@ */ + /** *@file *@breif @@ -55,7 +56,7 @@ extern int sock_getifaddr(const char *ifname, int family, int type, struct socka extern int sock_getifhwaddr(const char *ifname, uint8_t * hwaddr, uint8_t * addrlen); extern char *sock_hwaddrtostr(const uint8_t * haddr, int len, char *dst, const char *separator); -extern char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen); +//extern char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen); extern int sock_strtoaddr(const char *s, struct sockaddr *saout); extern int sock_set_recvtimeout(int sock, int seconds); @@ -74,16 +75,37 @@ extern int sock_getifinfo(const struct sockaddr *addr, char *ifname, -char *sock_strsockaddr(const struct sockaddr *sa, char *s, size_t maxlen, int addport); -int sock_parse_ip_address ( const char** ppszText, - unsigned char* abyAddr, int* pnPort, int* pbIsIPv6 ); +char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen, int addport); + + +/** + * Convert a sockaddr structure to a human readable string + * @param s sockaddr + * @return A char* pointer to converted address + * + * The returned string is pushed on the stack (unnamed variable), so this macro should + * only be used as function argument. + * + * Example: + * \code + struct sockaddr sa; + // Initialize sa ... + sprintf("Adress: %s",sock_addr2str(&sa)); + \endcode + */ +#define sock_addr2str(s) ( sock_addrtostr( (struct sockaddr*)s, (char[64]){0}, 64, 0 ) ) + +/** + * Same as #sock_addr2str, but also the port number is appended to the result + * @see #sock_addr2str + */ +#define sock_addr2str_p(s) ( sock_addrtostr( (struct sockaddr*)s, (char[64]){0}, 64,1 ) ) -#define sock_addr2str(s) ( sock_strsockaddr( (struct sockaddr*)s, (char[64]){0}, 64,0 ) ) #define sock_hwaddr2str(s,l) ( sock_hwaddrtostr( s,l, (char[64]){0}, ":" ) ) #define sock_hwaddr2idstr(s,l) ( sock_hwaddrtostr( s,l, (char[64]){0}, "" ) ) -#define sock_addrtostr(s,str,n) sock_strsockaddr(s,str,n,1) +//#define sock_addrtostr(s,str,n) sock_addrtostr(s,str,n,1) #define sock_addrfamily(addr) ( ((struct sockaddr_storage*)(addr))->ss_family ) From eb90a1bcad09e1d70b5eef8215b9c5662e37578d Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:09:56 +0000 Subject: [PATCH 12/15] re-indented FossilOrigin-Name: 0c65f09d66682d7f92fb37c44d9c7a406ffd59e16623dfee579392a5bc4c25aa --- src/cw/sock_addrtostr.c | 75 +++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/src/cw/sock_addrtostr.c b/src/cw/sock_addrtostr.c index 5dbe6fda..30b7fd96 100644 --- a/src/cw/sock_addrtostr.c +++ b/src/cw/sock_addrtostr.c @@ -35,10 +35,10 @@ #include #ifdef AF_LINK -# include +#include #endif #ifdef AF_PACKET -# include +#include #endif #include "sock.h" @@ -49,62 +49,64 @@ * @param s Destination buffer * @param maxlen Size of destination buffer * @param addport If true then the port number wil be added to the output + * * Works only for sockaddrs of type AF_INET, AF_INET6, AF_PACKET, AF_LINK. */ -char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen,int addport) +char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen, int addport) { char d[maxlen]; int port; - switch(sa->sa_family) { + switch (sa->sa_family) { case AF_INET: - inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), d, maxlen); - if (addport){ - port = ((struct sockaddr_in *)sa)->sin_port; - sprintf(s,"%s:%i",d,ntohs(port)); - } - else - sprintf(s,"%s",d); + inet_ntop(AF_INET, &(((struct sockaddr_in *) sa)->sin_addr), d, + maxlen); + if (addport) { + port = ((struct sockaddr_in *) sa)->sin_port; + sprintf(s, "%s:%i", d, ntohs(port)); + } else + sprintf(s, "%s", d); break; - case AF_INET6: - inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), d, maxlen); - if (addport){ - port = ((struct sockaddr_in6 *)sa)->sin6_port; - sprintf(s,"[%s]:%i",d,ntohs(port)); - } - else - sprintf(s,"%s",d); - break; + case AF_INET6: + inet_ntop(AF_INET6, &(((struct sockaddr_in6 *) sa)->sin6_addr), d, + maxlen); + if (addport) { + port = ((struct sockaddr_in6 *) sa)->sin6_port; + sprintf(s, "[%s]:%i", d, ntohs(port)); + } else + sprintf(s, "%s", d); + break; #ifdef AF_LINK case AF_LINK: - { - struct sockaddr_dl *sl=(struct sockaddr_dl*)sa; - sock_hwaddrtostr(((uint8_t*)sl->sdl_data)+sl->sdl_nlen,sl->sdl_alen,s,":"); + { + struct sockaddr_dl *sl = (struct sockaddr_dl *) sa; + sock_hwaddrtostr(((uint8_t *) sl->sdl_data) + sl->sdl_nlen, + sl->sdl_alen, s, ":"); - } + } break; -#endif /* AF_LINLK */ +#endif /* AF_LINLK */ #ifdef AF_PACKET case AF_PACKET: - { - int i; - char *sp=s; - struct sockaddr_ll *sl=(struct sockaddr_ll*)sa; - for (i=0; isll_halen-1; i++){ - sprintf(sp,"%02X:",sl->sll_addr[i]); - sp+=3; - } - sprintf(sp,"%02X",sl->sll_addr[i]); + { + int i; + char *sp = s; + struct sockaddr_ll *sl = (struct sockaddr_ll *) sa; + for (i = 0; i < sl->sll_halen - 1; i++) { + sprintf(sp, "%02X:", sl->sll_addr[i]); + sp += 3; } + sprintf(sp, "%02X", sl->sll_addr[i]); + } break; -#endif /* AF_PACKET */ +#endif /* AF_PACKET */ - default: + default: strncpy(s, "Unknown AF", maxlen); return NULL; } @@ -114,4 +116,3 @@ char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen,int addpo /** * @} */ - From b96c8d3bf08e6d827efc48609709d3e66027b2ce Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:23:05 +0000 Subject: [PATCH 13/15] Changed to "new" sock_addrtostr. FossilOrigin-Name: 4514d4f40bed468e001f84182e37529369b1b973c77c35106d40ed0a7b05ae55 --- src/ac/socklist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ac/socklist.c b/src/ac/socklist.c index b18837fb..b9bab9a0 100644 --- a/src/ac/socklist.c +++ b/src/ac/socklist.c @@ -264,7 +264,7 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto) optlen = sizeof(mreq); char sinin[100]; - sock_addrtostr((struct sockaddr *) sain, sinin, 100); + sock_addrtostr((struct sockaddr *) sain, sinin, 100,1); if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, opt, optlen) < 0) { From 70d5986760a6ac25c0f8ba93d8aa62f265beb808 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:23:34 +0000 Subject: [PATCH 14/15] Changed to sock_addrtostr FossilOrigin-Name: f14ea1932e4c80b675f6b671dfde15e110abefd8e4e955a17bb9d609eff23354 --- src/ac/conf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ac/conf.c b/src/ac/conf.c index 1429a5f1..8f155413 100644 --- a/src/ac/conf.c +++ b/src/ac/conf.c @@ -389,7 +389,7 @@ static int init_listen_addrs() } if (ifa->ifa_addr->sa_family == AF_INET && conf_ipv4) { - sock_addrtostr(ifa->ifa_addr, str, 100); + sock_addrtostr(ifa->ifa_addr, str, 100,1); *strchr(str, ':') = 0; conf_listen_addrs[ctr] = (char *) cw_setstr((uint8_t **) & conf_listen_addrs[ctr], @@ -400,7 +400,7 @@ static int init_listen_addrs() } #ifdef WITH_IPV6 if (ifa->ifa_addr->sa_family == AF_INET6 && conf_ipv6) { - sock_addrtostr(ifa->ifa_addr, str, 100); + sock_addrtostr(ifa->ifa_addr, str, 100,1); if (strncmp(str, "fe80:", 5) == 0) { strcat(str, "%"); strcat(str, ifa->ifa_name); @@ -496,7 +496,7 @@ int init_bcast_addrs() char str[100]; if (ifa->ifa_broadaddr) { - sock_addrtostr(ifa->ifa_broadaddr, str, 100); + sock_addrtostr(ifa->ifa_broadaddr, str, 100,1); *strchr(str, ':') = 0; stravltree_add(t, str); } From 22820a911bea88e2e1743c2030600e9c07399e4e Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 6 Mar 2016 10:23:50 +0000 Subject: [PATCH 15/15] Fixed a lot of IPV6 stuff. FossilOrigin-Name: 30d5fde1afc089a036d5e8aa52211746f6666ffc83fd4b4a9a58e91f50576a00 --- src/wtp/discovery.c | 11 +++++++++++ src/wtp/join.c | 19 +++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c index a97a6a8f..c10044cd 100644 --- a/src/wtp/discovery.c +++ b/src/wtp/discovery.c @@ -73,6 +73,9 @@ cw_aciplist_t cw_select_ac(struct conn *conn, mbag_t dis) DEFINE_AVLITER(i, dis); avliter_foreach(&i){ + + + mbag_t ac = ((mbag_item_t *) (avliter_get(&i)))->data; char *ac_name = mbag_get_str(ac, CW_ITEM_AC_NAME,NULL); @@ -92,9 +95,17 @@ printf("nprio: %d\n",priolist->count); cw_aciplist_t acips = mbag_get_mavl(ac, CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST); +printf("Number of acips =%d\n",acips->count); + + DEFINE_AVLITER(i2, acips); avliter_foreach(&i2){ + + cw_acip_t *acip = avliter_get(&i2); + +printf("The acip: %s\n",sock_addr2str(&acip->ip)); + cw_acip_t *n = malloc(sizeof(cw_acip_t)); memcpy(n,acip,sizeof(cw_acip_t)); diff --git a/src/wtp/join.c b/src/wtp/join.c index e5249db5..3b6136db 100644 --- a/src/wtp/join.c +++ b/src/wtp/join.c @@ -102,14 +102,16 @@ int run_join_d(struct sockaddr *sa) int sockfd; int rc; - sockfd = socket(AF_INET, SOCK_DGRAM, 0); + sockfd = socket(sa->sa_family, SOCK_DGRAM, 0); if (sockfd == -1) { cw_log(LOG_ERR, "Can't create socket: %s\n", strerror(errno)); return -1; } sock_set_recvtimeout(sockfd, 1); + conn->sock = sockfd; + sock_copyaddr(&conn->addr, sa); - rc = connect(sockfd, (struct sockaddr *) sa, +/* rc = connect(sockfd, (struct sockaddr *) sa, sock_addrlen((struct sockaddr *) sa)); if (rc < 0) { @@ -118,9 +120,7 @@ int run_join_d(struct sockaddr *sa) close(sockfd); return -1; } - - conn->sock = sockfd; - sock_copyaddr(&conn->addr, sa); +*/ cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa)); @@ -153,7 +153,7 @@ int run_join_d(struct sockaddr *sa) rc = dtls_connect(conn); if (rc != 1) { dtls_shutdown(conn); - cw_log(LOG_ERR, "Can't establish DTLS connection to %s", + cw_log(LOG_ERR, "Can't establish DTLS connection with %s", sock_addr2str(sa)); close(sockfd); return 0; @@ -226,12 +226,15 @@ int join() cw_acip_t *ip = avliter_get(&ii); + cw_dbg(DBG_INFO, "Going to join CAWAP controller on %s", - sock_addr2str(&ip->ip)); + sock_addr2str_p(&ip->ip)); int rc = run_join_d((struct sockaddr *) &ip->ip); - if (!rc) + + if (rc<=0) continue; + rc = run_join(conn); if (rc) { conn->capwap_state = CW_STATE_CONFIGURE;