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;