diff --git a/examples/check_nip_enable.c b/examples/check_nip_enable.c index 88bf42197b054e64b9532e2ba2549b790e43ee2c..5a4210f9985ba4dda464e6c598e19bdd274b7fa9 100644 --- a/examples/check_nip_enable.c +++ b/examples/check_nip_enable.c @@ -74,7 +74,7 @@ int main(int argc, char **argv) { int af_ninet = check_nip_enable(); - if (g_nip_enable) + if (af_ninet) printf("Support NewIP.\n\n"); else printf("Not support NewIP.\n\n"); diff --git a/examples/nip_addr.c b/examples/nip_addr.c index 00f5cc6ddeee9258930b465172c14f6a42110926..30eecaeef0c80f5e3d99dbc1190bb6d9fe76101d 100644 --- a/examples/nip_addr.c +++ b/examples/nip_addr.c @@ -45,7 +45,7 @@ * ioctl(fd, SIOGIFINDEX, &ifr); * ifr.ifr_ifindex; ===> ifindex */ -int32_t nip_add_addr(int32_t ifindex, struct nip_addr *addr, int opt) +int32_t nip_add_addr(int32_t ifindex, const struct nip_addr *addr, int opt) { int fd, ret; struct nip_ifreq ifrn; @@ -60,7 +60,7 @@ int32_t nip_add_addr(int32_t ifindex, struct nip_addr *addr, int opt) ret = ioctl(fd, opt, &ifrn); if (ret < 0 && errno != EEXIST) { // ignore File Exists error - printf("cfg newip addr fail, ifindex=%d, opt=%u, ret=%d.\n", ifindex, opt, ret); + printf("cfg newip addr fail, ifindex=%d, opt=%d, ret=%d.\n", ifindex, opt, ret); close(fd); return -1; } @@ -80,6 +80,7 @@ int main(int argc, char **argv_input) { int ret; int opt; + unsigned int len; int ifindex = 0; char **argv = argv_input; char cmd[ARRAY_LEN]; @@ -87,7 +88,7 @@ int main(int argc, char **argv_input) struct nip_addr addr = {0}; if (argc != DEMO_INPUT_3) { - printf("unsupport addr cfg input, argc=%u.\n", argc); + printf("unsupport addr cfg input, argc=%d.\n", argc); cmd_help(); return -1; } @@ -95,7 +96,13 @@ int main(int argc, char **argv_input) /* 配置参数1解析: */ argv++; memset(dev, 0, ARRAY_LEN); - ret = sscanf(*argv, "%s", dev); + + len = strlen(*argv); + if (!len || len >= (ARRAY_LEN - 1)) + return -1; + memcpy(dev, *argv, len); + dev[len + 1] = '\0'; + if (strncmp(dev, "wlan", NAME_WLAN_LEN)) { printf("unsupport addr cfg cmd-1, cmd=%s.\n", dev); cmd_help(); @@ -108,7 +115,13 @@ int main(int argc, char **argv_input) /* 配置参数2解析: { add | del } */ argv++; memset(cmd, 0, ARRAY_LEN); - ret = sscanf(*argv, "%s", cmd); + + len = strlen(*argv); + if (!len || len >= (ARRAY_LEN - 1)) + return -1; + memcpy(cmd, *argv, len); + cmd[len + 1] = '\0'; + if (!strncmp(cmd, "add", NAME_WLAN_LEN)) { opt = SIOCSIFADDR; } else if (!strncmp(cmd, "del", NAME_WLAN_LEN)) { @@ -131,7 +144,7 @@ int main(int argc, char **argv_input) if (ret != 0) return -1; - printf("%s (ifindex=%u) cfg addr success.\n", dev, ifindex); + printf("%s (ifindex=%d) cfg addr success.\n", dev, ifindex); return 0; } diff --git a/examples/nip_addr_cfg_demo.c b/examples/nip_addr_cfg_demo.c index 7915b70cf1d7499e4de84900904c2a9adf1c99ae..983902782cd01348ad5c33fc0c4da2c3d73a9156 100644 --- a/examples/nip_addr_cfg_demo.c +++ b/examples/nip_addr_cfg_demo.c @@ -109,7 +109,7 @@ int main(int argc, char **argv) if (ret != 0) return -1; - printf("%s %s(ifindex=%u) cfg addr success.\n", *argv, NIC_NAME, ifindex); + printf("%s %s(ifindex=%d) cfg addr success.\n", *argv, NIC_NAME, ifindex); return 0; } diff --git a/examples/nip_lib.c b/examples/nip_lib.c index 5c84643611d1421f8ce7a4824cfd403d196c08b7..1c679a0a576e562cfa71053e535de00bfa16f7af 100644 --- a/examples/nip_lib.c +++ b/examples/nip_lib.c @@ -87,14 +87,14 @@ int nip_addr_fmt(char *addr_str, struct nip_addr *sap, int addrlen_input) } else if (addr_str[i] >= 'a' && addr_str[i] <= 'f') { addr_str[i] = addr_str[i] - STR_FMT_2; } else { - printf("Newip addr error: uaddr[%u]=%c.\n", i, addr_str[i]); + printf("Newip addr error: uaddr[%d]=%c.\n", i, addr_str[i]); return 1; } } first_byte = addr_str[0] << NIP_ADDR_LEN_4; first_byte += addr_str[1]; - if (first_byte >= 0x00 && first_byte <= ADDR_FIRST_DC) + if (first_byte <= ADDR_FIRST_DC) addrlen = NIP_ADDR_LEN_1; else if ((first_byte > ADDR_FIRST_DC && first_byte <= ADDR_FIRST_F0) || (first_byte == ADDR_FIRST_FF)) @@ -117,7 +117,7 @@ int nip_addr_fmt(char *addr_str, struct nip_addr *sap, int addrlen_input) sap->bitlen = addrlen * NIP_ADDR_LEN_8; printf("*************************************************\n"); - printf("Newip addr len=%u\n", addrlen); + printf("Newip addr len=%d\n", addrlen); for (i = 0; i < addrlen; i++) { sap->nip_addr_field8[i] = addr_str[i * INDEX_2] << INDEX_4; sap->nip_addr_field8[i] += addr_str[i * INDEX_2 + 1]; @@ -131,6 +131,7 @@ int nip_addr_fmt(char *addr_str, struct nip_addr *sap, int addrlen_input) int nip_get_addr(char **args, struct nip_addr *addr) { int ret; + unsigned int len; char *sp = *args; int addrlen_input = 0; __u8 addr_str[INDEX_MAX] = {0}; @@ -141,11 +142,16 @@ int nip_get_addr(char **args, struct nip_addr *addr) } if (addrlen_input % ADDR_STR_LEN != 0) { - printf("NewIP addr str-len invalid, addrlen_input=%u.\n", addrlen_input); + printf("NewIP addr str-len invalid, addrlen_input=%d.\n", addrlen_input); return -1; } - ret = sscanf(*args, "%s", addr_str); + len = strlen(*args); + if (!len || len >= (INDEX_MAX - 1)) + return -1; + memcpy(addr_str, *args, len); + addr_str[len + 1] = '\0'; + return nip_addr_fmt(addr_str, addr, addrlen_input / ADDR_STR_LEN); } diff --git a/examples/nip_route.c b/examples/nip_route.c index 47f56bdf3eda07c3288a3bc0be3a2918b10d7bfd..2fc0ea7923f640efac4dbc556bb1e08731ea33c4 100644 --- a/examples/nip_route.c +++ b/examples/nip_route.c @@ -47,8 +47,8 @@ * ioctl(fd, SIOGIFINDEX, &ifr); * ifr.ifr_ifindex; ===> ifindex */ -int nip_route_add(int ifindex, struct nip_addr *dst_addr, struct nip_addr *gateway_addr, - uint8_t gateway_flag, int opt) +int nip_route_add(int ifindex, const struct nip_addr *dst_addr, + const struct nip_addr *gateway_addr, uint8_t gateway_flag, int opt) { int fd, ret; struct nip_rtmsg rt; @@ -92,9 +92,8 @@ int main(int argc, char **argv_input) { int ret; int opt; + unsigned int len; int ifindex = 0; - uint8_t dst_addr_len; - uint8_t gateway_addr_len; uint8_t gateway_flag = 0; char **argv = argv_input; char cmd[ARRAY_LEN]; @@ -103,7 +102,7 @@ int main(int argc, char **argv_input) struct nip_addr gateway_addr = {0}; if (argc != DEMO_INPUT_3 && argc != DEMO_INPUT_4) { - printf("unsupport route cfg input, argc=%u.\n", argc); + printf("unsupport route cfg input, argc=%d.\n", argc); cmd_help(); return -1; } @@ -111,7 +110,13 @@ int main(int argc, char **argv_input) /* 配置参数1解析: { add | del } */ argv++; memset(cmd, 0, ARRAY_LEN); - ret = sscanf(*argv, "%s", cmd); + + len = strlen(*argv); + if (!len || len >= (ARRAY_LEN - 1)) + return -1; + memcpy(cmd, *argv, len); + cmd[len + 1] = '\0'; + if (!strncmp(cmd, "add", NAME_WLAN_LEN)) { opt = SIOCADDRT; } else if (!strncmp(cmd, "del", NAME_WLAN_LEN)) { @@ -133,7 +138,13 @@ int main(int argc, char **argv_input) /* 配置参数3解析: */ argv++; memset(dev, 0, ARRAY_LEN); - ret = sscanf(*argv, "%s", dev); + + len = strlen(*argv); + if (!len || len >= (ARRAY_LEN - 1)) + return -1; + memcpy(dev, *argv, len); + dev[len + 1] = '\0'; + if (strncmp(dev, "wlan", NAME_WLAN_LEN)) { printf("unsupport route cfg cmd-3, cmd=%s.\n", dev); cmd_help(); @@ -166,7 +177,7 @@ int main(int argc, char **argv_input) return -1; } - printf("%s (ifindex=%u) cfg route success.\n", dev, ifindex); + printf("%s (ifindex=%d) cfg route success.\n", dev, ifindex); return 0; } diff --git a/examples/nip_route_cfg_demo.c b/examples/nip_route_cfg_demo.c index 8a0d4b613a1d3cc03b7aec60953257bffbe6202d..f17cdfbb74ddcbf19f26f2b0b349025f562ecddb 100644 --- a/examples/nip_route_cfg_demo.c +++ b/examples/nip_route_cfg_demo.c @@ -87,8 +87,6 @@ int main(int argc, char **argv) uint8_t server_addr[INDEX_2] = {0xDE, 0x00}; // 2-byte address of the server: 0xDE00 uint8_t *dst_addr; uint8_t dst_addr_len; - uint8_t *gateway_addr; - uint8_t gateway_addr_len; if (argc == DEMO_INPUT_1) { if (!strcmp(*(argv + 1), "server")) { @@ -121,7 +119,7 @@ int main(int argc, char **argv) return -1; } - printf("%s %s(ifindex=%u) cfg route success.\n", *argv, NIC_NAME, ifindex); + printf("%s %s(ifindex=%d) cfg route success.\n", *argv, NIC_NAME, ifindex); return 0; } diff --git a/examples/nip_tcp_client_demo.c b/examples/nip_tcp_client_demo.c index 7a83be9fd47bfb62edb233de6c8dd2331bbcb15c..fac89e656e3d88c97bd4ce74b42bdee052d331d0 100644 --- a/examples/nip_tcp_client_demo.c +++ b/examples/nip_tcp_client_demo.c @@ -57,7 +57,6 @@ void *send_recv(void *args) fd_set readfds; struct timeval tv, stTime; struct thread_args *th_args = (struct thread_args *) args; - struct sockaddr_nin si_server = th_args->si_server; cfd = th_args->cfd; for (int i = 0; i < PKTCNT; i++) { @@ -86,6 +85,10 @@ void *send_recv(void *args) (void)gettimeofday(&stTime, NULL); ret = sscanf(buf, "%d %d NIP_TCP # %d", &sendtime_sec, &sendtime_usec, &no); + if (ret <= 0) { + perror("sscanf"); + goto END; + } printf("Received --%s sock %d success:%6d/%6d/no=%6d\n", buf, cfd, success, count + 1, no); } else { @@ -125,7 +128,7 @@ int main(int argc, char **argv) perror("connect"); return -1; } - printf("connect success, addr=0x%02x%02x, port=%u\n", + printf("connect success, addr=0x%02x%02x, port=%d\n", si_server.sin_addr.nip_addr_field8[INDEX_0], si_server.sin_addr.nip_addr_field8[INDEX_1], TCP_SERVER_PORT); diff --git a/examples/nip_tcp_server_demo.c b/examples/nip_tcp_server_demo.c index b692e3afae4850d0c921ed66e7e09eebd8fceaca..77433c857493defcbb227cdc185eb34251ca86ac 100644 --- a/examples/nip_tcp_server_demo.c +++ b/examples/nip_tcp_server_demo.c @@ -95,7 +95,7 @@ int main(int argc, char **argv) perror("bind"); goto END; } - printf("bind success, addr=0x%02x%02x, port=%u\n", + printf("bind success, addr=0x%02x%02x, port=%d\n", si_local.sin_addr.nip_addr_field8[INDEX_0], si_local.sin_addr.nip_addr_field8[INDEX_1], TCP_SERVER_PORT); diff --git a/examples/nip_udp_server_demo.c b/examples/nip_udp_server_demo.c index 07fc327dc9b5b7f6c3e690a1fe14c32ec57fbf97..f84af5c293002a14b1a3d058919f3617ee13ce97 100644 --- a/examples/nip_udp_server_demo.c +++ b/examples/nip_udp_server_demo.c @@ -50,7 +50,7 @@ void *recv_send(void *args) int fd, ret, recv_num; int count = 0; socklen_t slen; - struct sockaddr_nin si_local, si_remote; + struct sockaddr_nin si_remote; memcpy(&fd, args, sizeof(int)); while (count < PKTCNT) { @@ -105,7 +105,7 @@ int main(int argc, char **argv) goto END; } - printf("bind success, addr=0x%02x%02x, port=%u\n", + printf("bind success, addr=0x%02x%02x, port=%d\n", si_local.sin_addr.nip_addr_field8[INDEX_0], si_local.sin_addr.nip_addr_field8[INDEX_1], UDP_SERVER_PORT); diff --git a/src/common/nip_checksum.c b/src/common/nip_checksum.c index b99d527a671ff783c65a7544e0816c8a596ba8e5..98cadf8a4c0b3d286bfead03960afb33c967aab9 100644 --- a/src/common/nip_checksum.c +++ b/src/common/nip_checksum.c @@ -33,7 +33,7 @@ #define USHORT_PAYLOAD 16 #define NIP_CHECKSUM_UINT8_PAYLOAD 8 -unsigned int _nip_check_sum(unsigned char *data, unsigned short data_len) +unsigned int _nip_check_sum(const unsigned char *data, unsigned short data_len) { unsigned int i = 0, sum = 0; diff --git a/src/common/nip_hdr.h b/src/common/nip_hdr.h index 6b2855b3f788d0d2de40906754a6ea0af403945c..3c99a9691761bca05774a5c6486d4bc6c59e6e18 100644 --- a/src/common/nip_hdr.h +++ b/src/common/nip_hdr.h @@ -225,7 +225,7 @@ void nip_hdr_comm_encap(struct nip_hdr_encap *head); void nip_update_total_len(struct nip_hdr_encap *head, unsigned short total_len); /* Note: a function call requires its own byte order conversion.(niph->total_len) */ -int nip_hdr_parse(unsigned char *buf, unsigned int buf_len, struct nip_hdr_decap *niph); +int nip_hdr_parse(unsigned char *rcv_buf, unsigned int buf_len, struct nip_hdr_decap *niph); /* The length of the packet header is obtained according to the packet type, * source ADDRESS, and destination address. diff --git a/src/common/nip_hdr_decap.c b/src/common/nip_hdr_decap.c index 02f93eccee06838515deb4ef874495da42ff6d7e..99408c14b787a6211f6e55047c4a60bf9c672fdb 100644 --- a/src/common/nip_hdr_decap.c +++ b/src/common/nip_hdr_decap.c @@ -53,7 +53,7 @@ static int _get_nip_hdr_bitmap(unsigned char *buf, } /* Must carry the current field */ -static int _get_nip_hdr_ttl(unsigned char *buf, +static int _get_nip_hdr_ttl(const unsigned char *buf, unsigned char bitmap, struct nip_hdr_decap *niph) { @@ -70,7 +70,7 @@ static int _get_nip_hdr_ttl(unsigned char *buf, /* Communication between devices of the same version may not carry packet Header length, * but communication between devices of different versions must carry packet header length */ -static int _get_nip_hdr_len(unsigned char *buf, +static int _get_nip_hdr_len(const unsigned char *buf, unsigned char bitmap, struct nip_hdr_decap *niph) { @@ -90,7 +90,7 @@ static int _get_nip_hdr_len(unsigned char *buf, } /* Must carry the current field */ -static int _get_nip_hdr_nexthdr(unsigned char *buf, +static int _get_nip_hdr_nexthdr(const unsigned char *buf, unsigned char bitmap, struct nip_hdr_decap *niph) { @@ -260,7 +260,6 @@ static int nip_hdr_check(struct nip_hdr_decap *niph) int nip_hdr_parse(unsigned char *rcv_buf, unsigned int buf_len, struct nip_hdr_decap *niph) { int i = 0; - int len; int ret; unsigned char *buf = rcv_buf; unsigned char bitmap[BITMAP_MAX] = {0}; @@ -276,7 +275,8 @@ int nip_hdr_parse(unsigned char *rcv_buf, unsigned int buf_len, struct nip_hdr_d while (i < num) { if (i >= FACTORY_NUM_MAX) break; - len = hdr_parse_factory[i](buf, bitmap[i], niph); + int len = hdr_parse_factory[i](buf, bitmap[i], niph); + if (len < 0) return len; diff --git a/src/linux/net/newip/af_ninet.c b/src/linux/net/newip/af_ninet.c index b193f9f0142cd34ef3a8d742c35102c8474a3163..480e7c2d20ca80c4e0a1626133097be6c4376e7e 100644 --- a/src/linux/net/newip/af_ninet.c +++ b/src/linux/net/newip/af_ninet.c @@ -119,8 +119,6 @@ static int ninet_create(struct net *net, struct socket *sock, int protocol, if (err) goto out_rcu_unlock; - err = -EPERM; - sock->ops = answer->ops; answer_prot = answer->prot; answer_flags = answer->flags; diff --git a/src/linux/net/newip/ninet_hashtables.c b/src/linux/net/newip/ninet_hashtables.c index 5dfea0222d63b7b65c6fbc26209f9714694b61ea..bceb191ebabbb33f184698d0974557bcd9a0b792 100644 --- a/src/linux/net/newip/ninet_hashtables.c +++ b/src/linux/net/newip/ninet_hashtables.c @@ -347,10 +347,12 @@ static struct sock *ninet_lhash2_lookup(struct net *net, { struct inet_connection_sock *icsk; struct sock *sk, *result = NULL; - int score, hiscore = 0, matches = 0, reuseport = 0; + int hiscore = 0, matches = 0, reuseport = 0; u32 phash = 0; inet_lhash2_for_each_icsk_rcu(icsk, &ilb2->head) { + int score; + sk = (struct sock *)icsk; score = nip_tcp_compute_score(sk, net, hnum, daddr, dif, sdif); if (score > hiscore) { diff --git a/src/linux/net/newip/nip_addrconf.c b/src/linux/net/newip/nip_addrconf.c index 56dc3cf404527879cd3140f9238eec98336e312b..90d7ecc6d8792e0f8c3ff97d026696c9242671d2 100644 --- a/src/linux/net/newip/nip_addrconf.c +++ b/src/linux/net/newip/nip_addrconf.c @@ -48,7 +48,7 @@ static struct hlist_head ninet_addr_lst[NIN_ADDR_HSIZE]; static DEFINE_SPINLOCK(addrconf_hash_lock); static bool nip_chk_same_addr(struct net *net, const struct nip_addr *addr, - struct net_device *dev); + const struct net_device *dev); static int nip_get_firstaddr(const struct net_device *dev, struct nip_addr *addr); static int nip_addrconf_ifdown(struct net_device *dev, bool unregister); @@ -251,8 +251,6 @@ static int ninet_addr_add(struct net *net, int ifindex, struct ninet_dev *idev; struct net_device *dev; unsigned long timeout; - clock_t expires; - u32 flags; __u32 ifa_flags_tmp = ifa_flags; __u32 valid_lft_tmp = valid_lft; @@ -271,14 +269,10 @@ static int ninet_addr_add(struct net *net, int ifindex, return PTR_ERR(idev); timeout = addrconf_timeout_fixup(valid_lft_tmp, HZ); - if (addrconf_finite_timeout(timeout)) { - expires = jiffies_to_clock_t(timeout * HZ); + if (addrconf_finite_timeout(timeout)) valid_lft_tmp = timeout; - } else { - expires = 0; - flags = 0; + else ifa_flags_tmp |= IFA_F_PERMANENT; - } timeout = addrconf_timeout_fixup(preferred_lft, HZ); if (addrconf_finite_timeout(timeout)) { @@ -448,7 +442,7 @@ int nip_addrconf_del_ifaddr(struct net *net, void __user *arg) } static bool nip_chk_same_addr(struct net *net, const struct nip_addr *addr, - struct net_device *dev) + const struct net_device *dev) { unsigned int hash = ninet_addr_hash(addr); struct ninet_ifaddr *ifp; @@ -863,7 +857,6 @@ out: void nip_addr_to_str(const struct nip_addr *addr, unsigned char *buf, int buf_len) { int i; - int len = 0; int total_len = 0; int addr_num = addr->bitlen / NIP_ADDR_BIT_LEN_8; @@ -872,7 +865,8 @@ void nip_addr_to_str(const struct nip_addr *addr, unsigned char *buf, int buf_le total_len = sprintf(buf, "%s", "0x"); for (i = 0; (i < addr_num) && (total_len < buf_len); i++) { - len = sprintf(buf + total_len, "%02x", addr->nip_addr_field8[i]); + int len = sprintf(buf + total_len, "%02x", addr->nip_addr_field8[i]); + if (len <= 0) break; total_len += len; diff --git a/src/linux/net/newip/nip_output.c b/src/linux/net/newip/nip_output.c index 3ede2a062510125a9c9c8a9131b84f1fc9048ae1..3338fe3aa8b5d224eef0c3e54c868a5fd3b04a63 100644 --- a/src/linux/net/newip/nip_output.c +++ b/src/linux/net/newip/nip_output.c @@ -57,9 +57,7 @@ int nip_output(struct net *net, struct sock *sk, struct sk_buff *skb) struct nip_addr *nexthop; struct neighbour *neigh; int ret = 0; - int res; struct net_device *dev = skb_dst(skb)->dev; - bool is_v6gw = false; skb->protocol = htons(ETH_P_NEWIP); skb->dev = dev; @@ -73,7 +71,8 @@ int nip_output(struct net *net, struct sock *sk, struct sk_buff *skb) if (unlikely(!neigh)) neigh = __neigh_create(&nnd_tbl, nexthop, dev, false); if (!IS_ERR(neigh)) { - res = neigh_output(neigh, skb, is_v6gw); + int res = neigh_output(neigh, skb, false); + rcu_read_unlock_bh(); return res; } diff --git a/src/linux/net/newip/nndisc.c b/src/linux/net/newip/nndisc.c index a46e4f2123541e93c16f4e9c991c88f8cd304746..e2404c3ab41cc7de5e2a4e11e524a1cac4804fee 100644 --- a/src/linux/net/newip/nndisc.c +++ b/src/linux/net/newip/nndisc.c @@ -63,7 +63,7 @@ static void nndisc_solicit(struct neighbour *neigh, struct sk_buff *skb); static u32 nndisc_hash(const void *pkey, - const struct net_device *dev, __u32 *fhash_rnd); + const struct net_device *dev, __u32 *hash_rnd); static bool nndisc_key_eq(const struct neighbour *neigh, const void *pkey); static int nndisc_constructor(struct neighbour *neigh); @@ -142,9 +142,9 @@ static u32 nndisc_hash(const void *pkey, return nndisc_hashfn(pkey, dev, hash_rnd); } -static bool nndisc_key_eq(const struct neighbour *n, const void *pkey) +static bool nndisc_key_eq(const struct neighbour *neigh, const void *pkey) { - return neigh_key_eq800(n, pkey); + return neigh_key_eq800(neigh, pkey); } static int nndisc_constructor(struct neighbour *neigh) @@ -217,7 +217,7 @@ unsigned short nip_get_nndisc_send_checksum(struct sk_buff *skb, } bool nip_get_nndisc_rcv_checksum(struct sk_buff *skb, - u_char *transport_tail) + const u_char *transport_tail) { struct nip_pseudo_header nph = {0}; unsigned short check_len = (unsigned short)(transport_tail - (skb_transport_header(skb))); diff --git a/src/linux/net/newip/route.c b/src/linux/net/newip/route.c index 3c4f40712a47864fa02a1b28605bb37186ce1857..a7acfd35f3c3189b800f5bb1f24873b9fc17b991 100644 --- a/src/linux/net/newip/route.c +++ b/src/linux/net/newip/route.c @@ -212,7 +212,7 @@ static struct nip_rt_info *nip_rt_pcpu_alloc(struct nip_rt_info *rt) static struct nip_rt_info *nip_rt_make_pcpu_route(struct nip_rt_info *rt) { - struct nip_rt_info *pcpu_rt, *prev, **p; + struct nip_rt_info *pcpu_rt, *prev; pcpu_rt = nip_rt_pcpu_alloc(rt); if (!pcpu_rt) { @@ -224,7 +224,8 @@ static struct nip_rt_info *nip_rt_make_pcpu_route(struct nip_rt_info *rt) rcu_read_lock_bh(); if (rt->rt_pcpu) { - p = this_cpu_ptr(rt->rt_pcpu); + struct nip_rt_info **p = this_cpu_ptr(rt->rt_pcpu); + prev = cmpxchg(p, NULL, pcpu_rt); if (prev) { /* If someone did it before us, return prev instead */ diff --git a/src/linux/net/newip/tcp_nip.c b/src/linux/net/newip/tcp_nip.c index ce19f60f7e575225018d2c6e3ec6fd373f46b38d..922ff08dc1c2c4d25e08f9e372407e39c1a4b228 100644 --- a/src/linux/net/newip/tcp_nip.c +++ b/src/linux/net/newip/tcp_nip.c @@ -1739,7 +1739,6 @@ void tcp_nip_exit(void) #define LOG_PRINT_MAX_LEN 256 void nip_dbg(const char *fmt, ...) { - u32 pos; char str[LOG_PRINT_MAX_LEN]; va_list args; s32 ret; @@ -1748,7 +1747,6 @@ void nip_dbg(const char *fmt, ...) return; memset(str, 0, sizeof(str)); - pos = strlen(str); (void)memset(&args, 0, sizeof(va_list)); va_start(args, fmt); ret = vsnprintf(str, sizeof(str), fmt, args) + 1; diff --git a/src/linux/net/newip/tcp_nip_output.c b/src/linux/net/newip/tcp_nip_output.c index 80a69ba065cc43515b9a8cb4132c29e13622024d..7ef8b7bd986f87908223c73a4ce6fb9867da7a57 100644 --- a/src/linux/net/newip/tcp_nip_output.c +++ b/src/linux/net/newip/tcp_nip_output.c @@ -342,11 +342,11 @@ static __u16 tcp_nip_advertise_mss(struct sock *sk) struct tcp_sock *tp = tcp_sk(sk); const struct dst_entry *dst = __sk_dst_get(sk); int mss = tp->advmss; - int nip_hdr_len; - int nip_mss; u32 mtu; if (dst) { + int nip_hdr_len; + int nip_mss; unsigned int metric = dst_metric_advmss(dst); if (metric < mss) { @@ -359,7 +359,6 @@ static __u16 tcp_nip_advertise_mss(struct sock *sk) &sk->sk_nip_daddr); nip_hdr_len = nip_hdr_len == 0 ? NIP_HDR_MAX : nip_hdr_len; nip_mss = mtu - nip_hdr_len - sizeof(struct tcphdr); - if (nip_mss > mss) { mss = nip_mss; tp->advmss = mss; @@ -837,7 +836,7 @@ struct sk_buff *tcp_nip_make_synack(const struct sock *sk, struct dst_entry *dst int __nip_send_synack(struct request_sock *req, struct sk_buff *skb) { struct inet_request_sock *ireq = inet_rsk(req); /* 连接请求块 */ - int err = -EFAULT; + int err; int csummode = CHECKSUM_NONE; struct nip_addr *saddr, *daddr; struct nip_hdr_encap head = {0}; diff --git a/src/linux/net/newip/udp.c b/src/linux/net/newip/udp.c index 1b4f3fb49c2d4ac38e6f061d78e99b411d0e0628..44d6e0b055c406a65941022e20c2bb24e6e6b7e4 100644 --- a/src/linux/net/newip/udp.c +++ b/src/linux/net/newip/udp.c @@ -73,7 +73,6 @@ static int nip_udp_compute_score(struct sock *sk, struct net *net, const struct nip_addr *daddr, unsigned short hnum, int dif, int sdif) { - bool dev_match; int score = 0; struct inet_sock *inet; @@ -112,8 +111,8 @@ static int nip_udp_compute_score(struct sock *sk, struct net *net, /* Check the dev index */ if (sk->sk_bound_dev_if) { - dev_match = dif == sk->sk_bound_dev_if || - sdif == sk->sk_bound_dev_if; + bool dev_match = dif == sk->sk_bound_dev_if || sdif == sk->sk_bound_dev_if; + if (!dev_match) return -1; score++; @@ -135,12 +134,11 @@ static struct sock *nip_udp_lib_lookup2(struct net *net, { struct sock *sk; struct sock *result = NULL; - int score, badness; + int badness = -1; - badness = -1; udp_portaddr_for_each_entry_rcu(sk, &hslot2->head) { - score = nip_udp_compute_score(sk, net, saddr, sport, daddr, - hnum, dif, sdif); + int score = nip_udp_compute_score(sk, net, saddr, sport, daddr, hnum, dif, sdif); + if (score > badness) { result = sk; badness = score; @@ -226,8 +224,8 @@ int nip_udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock, int flags, int *addr_len) { struct sk_buff *skb; - unsigned int ulen, copied, datalen; - int peeking, off; + unsigned int ulen, copied; + int peeking, off, datalen; int err; off = sk_peek_offset(sk, flags); @@ -355,6 +353,13 @@ int nip_udp_output(struct sock *sk, struct msghdr *msg, size_t len) int err = 0; struct inet_sock *inet; + if (!sin) { + /* Currently, udp socket Connect function is not implemented. + * The destination address and port must be directly provided by Sendto + */ + return -EDESTADDRREQ; + } + if (sin->sin_family != AF_NINET) { DEBUG("%s: sin_family false.", __func__); return -EAFNOSUPPORT; @@ -365,16 +370,9 @@ int nip_udp_output(struct sock *sk, struct msghdr *msg, size_t len) } inet = inet_sk(sk); - if (sin) { - /* Destination address, port (network order) must be specified when sendto */ - dport = sin->sin_port; - fln.daddr = sin->sin_addr; - } else { - /* Currently, udp socket Connect function is not implemented. - * The destination address and port must be directly provided by Sendto - */ - return -EDESTADDRREQ; - } + /* Destination address, port (network order) must be specified when sendto */ + dport = sin->sin_port; + fln.daddr = sin->sin_addr; sport = htons(inet->inet_num); /* Check the dev index */