## UPGW告警消除记录 ### 告警日志和消除方法 下面是最开始编译代码的告警日志,在相同类型的告警日志下面附上了告警原因和对应的修改方法。 ``` [root@upgw upgw]# make == libs == libnes_api CC libnes_api.o /opt/upgw/libs/libnes_api/libnes_api.c:691:5: warning: no previous prototype for ‘nes_bypass_client’ [-Wmissing-prototypes] int nes_bypass_client(nes_remote_t *self, char *bypass_data_string) ^ /opt/upgw/libs/libnes_api/libnes_api.c:736:5: warning: no previous prototype for ‘nes_loglevel_set_client’ [-Wmissing-prototypes] int nes_loglevel_set_client(nes_remote_t *self, uint8_t loglevel) ^ /opt/upgw/libs/libnes_api/libnes_api.c:772:5: warning: no previous prototype for ‘nes_route_show_by_uuid’ [-Wmissing-prototypes] int nes_route_show_by_uuid(nes_remote_t *self, char *route_rule_uuid, ^ /opt/upgw/libs/libnes_api/libnes_api.c:964:5: warning: no previous prototype for ‘nes_domain_name_show’ [-Wmissing-prototypes] int nes_domain_name_show(nes_remote_t *self, struct nes_dns_data_s ** domain_name, uint16_t *domain_cnt, char *dns_rule_uuid) ^ 1、/* warning: no previous prototype for ‘nes_bypass_client’ */ 原因:该函数未声明。 修改方法:如果告警函数只在文件内部使用,在函数前面添加static即可消除告警;如果告警函数在其它文件被调用,则需在对应的.h文件中声明。此处因为其它文件有调用,所以选择第二种方式。 /opt/upgw/libs/libnes_api/libnes_api.c: In function ‘nes_domain_name_show’: /opt/upgw/libs/libnes_api/libnes_api.c:978:20: warning: unused variable ‘ret’ [-Wunused-variable] enum NES_ERROR ret; ^ 2、/* warning: unused variable ‘ret’ */ 原因:变量未被使用。 修改方法:删除该变量。 /opt/upgw/libs/libnes_api/libnes_api.c: At top level: /opt/upgw/libs/libnes_api/libnes_api.c:1062:5: warning: no previous prototype for ‘nes_domain_name_update’ [-Wmissing-prototypes] int nes_domain_name_update(nes_remote_t *self, char *dns_rule_uuid, char *lookup_keys) ^ /opt/upgw/libs/libnes_api/libnes_api.c:1250:5: warning: no previous prototype for ‘nes_route_remove_by_uuid’ [-Wmissing-prototypes] int nes_route_remove_by_uuid(nes_remote_t *self, char *route_rule_uuid) ^ /opt/upgw/libs/libnes_api/libnes_api.c:1289:5: warning: no previous prototype for ‘nes_route_update’ [-Wmissing-prototypes] int nes_route_update(nes_remote_t *self, struct ether_addr vm_mac_addr, ^ /opt/upgw/libs/libnes_api/libnes_api.c:1298:5: warning: no previous prototype for ‘nes_route_remove_mirror_by_uuid’ [-Wmissing-prototypes] int nes_route_remove_mirror_by_uuid(nes_remote_t *self, char *route_rule_uuid) ^ 3、/* warning: no previous prototype for ‘nes_domain_name_update’ */ 原因:同1。 修改方法:在相应的头文件中声明。 CC /opt/upgw//libs/libnes_sq/libnes_sq.o CC /opt/upgw//libs/libnes_cfgfile/libnes_cfgfile.o CC /opt/upgw//libs/libnes_routefile/libnes_routefile.o /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_load’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:91:19: warning: assignment from incompatible pointer type [enabled by default] nes_routefile = rte_cfgfile_load(filename, flags); ^ /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_entry’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:98:5: warning: passing argument 1 of ‘rte_cfgfile_get_entry’ from incompatible pointer type [enabled by default] *value = rte_cfgfile_get_entry(nes_routefile, section, entry); ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:319:13: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ const char *rte_cfgfile_get_entry(struct rte_cfgfile *cfg, ^ /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_has_section’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:105:5: warning: passing argument 1 of ‘rte_cfgfile_has_section’ from incompatible pointer type [enabled by default] return 0 == rte_cfgfile_has_section(nes_routefile,section) ? NES_FAIL : NES_SUCCESS; ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:215:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_has_section(struct rte_cfgfile *cfg, const char *sectionname); ^ /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_get_entries’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:112:5: warning: passing argument 1 of ‘rte_cfgfile_section_entries’ from incompatible pointer type [enabled by default] return rte_cfgfile_section_entries(nes_routefile, sectionname, entries, max_entries) > 0 ? ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:271:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_section_entries(struct rte_cfgfile *cfg, ^ 4、/* warning: assignment from incompatible pointer type */ 原因:参数类型不匹配,需要的类型是struct rte_cfgfile *,而传入的nes_routefile类型是struct rte_routefile *。 修改方法:struct rte_routefile和struct rte_cfgfile中定义的变量一致,将nes_routefile改为struct rte_cfgfile *类型。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: At top level: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:116:5: warning: no previous prototype for ‘nes_routefile_add_entry’ [-Wmissing-prototypes] int nes_routefile_add_entry(const char *sectionname, const char *entryname, const char *entryvalue) ^ 5、/* warning: no previous prototype */ 原因:同1。 修改方法:在相应的头文件中声明。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_add_entry’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:119:5: warning: passing argument 1 of ‘rte_cfgfile_add_entry’ from incompatible pointer type [enabled by default] return rte_cfgfile_add_entry(nes_routefile, sectionname, entryname, entryvalue); ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:137:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_add_entry(struct rte_cfgfile *cfg, ^ 6、/* warning: passing argument 1 of ‘rte_cfgfile_add_entry’ from incompatible pointer type */ 原因:同4。 修改方法:同4。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: At top level: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:122:5: warning: no previous prototype for ‘nes_routefile_save’ [-Wmissing-prototypes] int nes_routefile_save(char *filename) ^ 7、/* warning: no previous prototype */ 原因:同1。 修改方法:在相应的头文件中声明。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_save’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:127:5: warning: passing argument 1 of ‘rte_cfgfile_save’ from incompatible pointer type [enabled by default] return rte_cfgfile_save(nes_routefile, filename); ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:168:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_save(struct rte_cfgfile *cfg, const char *filename); ^ 8、/* warning: passing argument 1 of ‘rte_cfgfile_save’ from incompatible pointer type */ 原因:同4。 修改方法:同4。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: At top level: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:130:5: warning: no previous prototype for ‘nes_routefile_set_entry’ [-Wmissing-prototypes] int nes_routefile_set_entry(const char *sectionname, const char *entryname, const char *entryvalue) ^ 9、/* no previous prototype for ‘nes_routefile_set_entry’ */ 原因:同1。 修改方法:在相应的头文件中声明。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_set_entry’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:133:5: warning: passing argument 1 of ‘rte_cfgfile_set_entry’ from incompatible pointer type [enabled by default] return rte_cfgfile_set_entry(nes_routefile, sectionname, entryname, entryvalue); ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:155:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_set_entry(struct rte_cfgfile *cfg, const char *sectionname, ^ /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_section_num_entries’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:139:5: warning: passing argument 1 of ‘rte_cfgfile_section_num_entries’ from incompatible pointer type [enabled by default] return rte_cfgfile_section_num_entries(nes_routefile, sectionname); ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:230:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_section_num_entries(struct rte_cfgfile *cfg, ^ /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_close’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:144:5: warning: passing argument 1 of ‘rte_cfgfile_close’ from incompatible pointer type [enabled by default] rte_cfgfile_close(nes_routefile); ^ In file included from /opt/upgw//libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:349:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_close(struct rte_cfgfile *cfg); ^ 10、/* warning: passing argument 1 of ‘rte_cfgfile_set_entry’ from incompatible pointer type */ 原因:同4。 修改方法:同4。 /opt/upgw//libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_clear_deleted_entries’: /opt/upgw//libs/libnes_routefile/libnes_routefile.c:67:14: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result] fgets(entry, 320, route_file); ^ 11、/* ignoring return value of ‘fgets’, declared with attribute warn_unused_result */ 原因:未对返回值处理。 修改方法:添加对返回值的判断:if (fgets(entry, 320, route_file) != NULL) {},如果无异常再进行后续的操作。 CC /opt/upgw//libs/libnes_redis/libnes_redis.o /opt/upgw//libs/libnes_redis/libnes_redis.c:17:7: warning: no previous prototype for ‘get_rule_key’ [-Wmissing-prototypes] char *get_rule_key(uint8_t type) { ^ 12、/* warning: no previous prototype for ‘get_rule_key’ */ 原因:同1。 修改方法:函数加static修饰。 /opt/upgw//libs/libnes_redis/libnes_redis.c: In function ‘get_rule_key’: /opt/upgw//libs/libnes_redis/libnes_redis.c:20:13: warning: return discards ‘const’ qualifier from pointer target type [enabled by default] return "traffic_rules"; ^ /opt/upgw//libs/libnes_redis/libnes_redis.c:22:13: warning: return discards ‘const’ qualifier from pointer target type [enabled by default] return "dns_rules"; ^ /opt/upgw//libs/libnes_redis/libnes_redis.c:25:13: warning: return discards ‘const’ qualifier from pointer target type [enabled by default] return INVALID_RULE; ^ 13、/* warning: return discards ‘const’ qualifier from pointer target type */ 原因:函数实际的返回值与定义函数的返回值不一致。 修改方法:函数定义的返回值类型也加const修饰。 /opt/upgw//libs/libnes_redis/libnes_redis.c: At top level: /opt/upgw//libs/libnes_redis/libnes_redis.c:29:15: warning: function declaration isn’t a prototype [-Wstrict-prototypes] redisContext *redis_connect() { ^ /opt/upgw//libs/libnes_redis/libnes_redis.c: In function ‘redis_connect’: /opt/upgw//libs/libnes_redis/libnes_redis.c:29:15: warning: old-style function definition [-Wold-style-definition] 14、/* warning: function declaration isn’t a prototype */ /* warning: old-style function definition */ 原因:函数未声明;函数没有参数。 修改方法:加static修饰;没有参数需加void。 /opt/upgw//libs/libnes_redis/libnes_redis.c: In function ‘sync_get_number_of_rule’: /opt/upgw//libs/libnes_redis/libnes_redis.c:170:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long long int’ [-Wformat=] NES_LOG(INFO, "Get number of %s: %d successfully.\n", rule_key, reply->integer); ^ 15、/* warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long long int’ */ 原因:变量类型与打印形式不匹配。 修改方法:打印方法变为%lld。 /opt/upgw//libs/libnes_redis/libnes_redis.c: In function ‘sync_get_all_rule’: /opt/upgw//libs/libnes_redis/libnes_redis.c:221:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (i=0; i 0 ? ^ In file included from /opt/upgw/libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:271:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_section_entries(struct rte_cfgfile *cfg, ^ 21、/* warning: assignment from incompatible pointer type */ 原因:同4。 修改方法:同4。 /opt/upgw/libs/libnes_routefile/libnes_routefile.c: At top level: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:116:5: warning: no previous prototype for ‘nes_routefile_add_entry’ [-Wmissing-prototypes] 22、/* warning: no previous prototype for ‘nes_routefile_add_entry’ */ 原因:同1。 修改方法:在相应的头文件中声明。 int nes_routefile_add_entry(const char *sectionname, const char *entryname, const char *entryvalue) ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_add_entry’: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:119:5: warning: passing argument 1 of ‘rte_cfgfile_add_entry’ from incompatible pointer type [enabled by default] return rte_cfgfile_add_entry(nes_routefile, sectionname, entryname, entryvalue); ^ In file included from /opt/upgw/libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:137:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_add_entry(struct rte_cfgfile *cfg, ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: At top level: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:122:5: warning: no previous prototype for ‘nes_routefile_save’ [-Wmissing-prototypes] int nes_routefile_save(char *filename) ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_save’: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:127:5: warning: passing argument 1 of ‘rte_cfgfile_save’ from incompatible pointer type [enabled by default] return rte_cfgfile_save(nes_routefile, filename); ^ In file included from /opt/upgw/libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:168:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_save(struct rte_cfgfile *cfg, const char *filename); ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: At top level: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:130:5: warning: no previous prototype for ‘nes_routefile_set_entry’ [-Wmissing-prototypes] int nes_routefile_set_entry(const char *sectionname, const char *entryname, const char *entryvalue) ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_set_entry’: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:133:5: warning: passing argument 1 of ‘rte_cfgfile_set_entry’ from incompatible pointer type [enabled by default] return rte_cfgfile_set_entry(nes_routefile, sectionname, entryname, entryvalue); ^ In file included from /opt/upgw/libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:155:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_set_entry(struct rte_cfgfile *cfg, const char *sectionname, ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_section_num_entries’: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:139:5: warning: passing argument 1 of ‘rte_cfgfile_section_num_entries’ from incompatible pointer type [enabled by default] return rte_cfgfile_section_num_entries(nes_routefile, sectionname); ^ In file included from /opt/upgw/libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:230:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_section_num_entries(struct rte_cfgfile *cfg, ^ /opt/upgw/libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_close’: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:144:5: warning: passing argument 1 of ‘rte_cfgfile_close’ from incompatible pointer type [enabled by default] rte_cfgfile_close(nes_routefile); ^ In file included from /opt/upgw/libs/libnes_routefile/libnes_routefile.c:15:0: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_cfgfile.h:349:5: note: expected ‘struct rte_cfgfile *’ but argument is of type ‘struct rte_routefile *’ int rte_cfgfile_close(struct rte_cfgfile *cfg); ^ 23、/* warning: passing argument 1 of ‘rte_cfgfile_add_entry’ from incompatible pointer type */ 原因:同4。 修改方法:同4。 /* warning: no previous prototype for ‘nes_routefile_save’ */ 原因:同1。 修改方法:在对应的.h中声明。 /opt/upgw/libs/libnes_routefile/libnes_routefile.c: In function ‘nes_routefile_clear_deleted_entries’: /opt/upgw/libs/libnes_routefile/libnes_routefile.c:67:14: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result] fgets(entry, 320, route_file); ^ 24、/* warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result */ 原因:同11。 修改方法:同11。 AR libnes_routefile.a INSTALL-LIB libnes_routefile.a == libnes_redis CC libnes_redis.o /opt/upgw/libs/libnes_redis/libnes_redis.c:17:7: warning: no previous prototype for ‘get_rule_key’ [-Wmissing-prototypes] char *get_rule_key(uint8_t type) { ^ 25、/* warning: no previous prototype for ‘get_rule_key’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/libs/libnes_redis/libnes_redis.c: In function ‘get_rule_key’: /opt/upgw/libs/libnes_redis/libnes_redis.c:20:13: warning: return discards ‘const’ qualifier from pointer target type [enabled by default] return "traffic_rules"; ^ /opt/upgw/libs/libnes_redis/libnes_redis.c:22:13: warning: return discards ‘const’ qualifier from pointer target type [enabled by default] return "dns_rules"; ^ /opt/upgw/libs/libnes_redis/libnes_redis.c:25:13: warning: return discards ‘const’ qualifier from pointer target type [enabled by default] return INVALID_RULE; ^ 26、/* return discards ‘const’ qualifier from pointer target type */ 原因:同13。 修改方法:同13。 /opt/upgw/libs/libnes_redis/libnes_redis.c: At top level: /opt/upgw/libs/libnes_redis/libnes_redis.c:29:15: warning: function declaration isn’t a prototype [-Wstrict-prototypes] redisContext *redis_connect() { ^ /opt/upgw/libs/libnes_redis/libnes_redis.c: In function ‘redis_connect’: /opt/upgw/libs/libnes_redis/libnes_redis.c:29:15: warning: old-style function definition [-Wold-style-definition] 27、/* warning: function declaration isn’t a prototype */ /* warning: old-style function definition */ 原因:同14。 修改方法:同14。 /opt/upgw/libs/libnes_redis/libnes_redis.c: In function ‘sync_get_number_of_rule’: /opt/upgw/libs/libnes_redis/libnes_redis.c:170:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long long int’ [-Wformat=] NES_LOG(INFO, "Get number of %s: %d successfully.\n", rule_key, reply->integer); ^ 28、/* warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long long int’ */ 原因:同15。 修改方法:同15。 /opt/upgw/libs/libnes_redis/libnes_redis.c: In function ‘sync_get_all_rule’: /opt/upgw/libs/libnes_redis/libnes_redis.c:221:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (i=0; iport].device->name, mbuf->udata64, entry->dst_ring->ring->name); ^ 32、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:变量类型与打印形式不匹配,uint64_t在32位系统中表示为long long int,在64位系统中表示long int。 修改方法:为了同时支持32位和64位操作系统,使用%"PRIu64"打印。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_upstream_gtp’: /opt/upgw/daemon/nts/nts_edit.c:455:5: warning: missing braces around initializer [-Wmissing-braces] nts_acl_tuple_t tuples[MAX_BURST_SIZE] = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:455:5: warning: (near initialization for ‘tuples[0]’) [-Wmissing-braces] 33、/* warning: missing braces around initializer */ /* warning: (near initialization for ‘tuples[0]’) */ 原因:初始化不合理。 修改方法:使用memset函数将结构体数组置0。 /opt/upgw/daemon/nts/nts_edit.c:481:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM UPSTR TO ENGRESS, proto-type:NONE_N3_N9, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, egress_ring->ring->name); ^ 34、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c:501:13: warning: implicit declaration of function ‘domainname_check’ [-Wimplicit-function-declaration] if(NES_SUCCESS == domainname_check(domain_name, &ip)){ ^ /opt/upgw/daemon/nts/nts_edit.c:501:13: warning: nested extern declaration of ‘domainname_check’ [-Wnested-externs] 35、/* warning: implicit declaration of function ‘domainname_check’ */ /* warning: nested extern declaration of ‘domainname_check’ */ 原因:该函数未被声明就拿来使用。 修改方法:该函数在对应头文件中声明,若声明过引用头文件。 /opt/upgw/daemon/nts/nts_edit.c:522:16: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM UPSTR TO DNS, proto-type:GTPU, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, ring->ring->name); ^ /opt/upgw/daemon/nts/nts_edit.c:540:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM UPSTR TO ENGRESS, proto-type:GTPU, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, egress_ring->ring->name); ^ /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_downstream_gtp’: /opt/upgw/daemon/nts/nts_edit.c:580:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM DWSTR TO ENGRESS, proto-type:NONE_N3_N9, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, egress_ring->ring->name); ^ /opt/upgw/daemon/nts/nts_edit.c:615:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM DWSTR TO ENGRESS, proto-type:GTPU, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, egress_ring->ring->name); ^ 36、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_egde_dns_check_hdr’: /opt/upgw/daemon/nts/nts_edit.c:669:13: warning: unused variable ‘dns_head_len’ [-Wunused-variable] int dns_head_len = sizeof(dns_header_t); ^ /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_egde_dns_hdr_parse_ip’: /opt/upgw/daemon/nts/nts_edit.c:710:13: warning: unused variable ‘dns_head_len’ [-Wunused-variable] int dns_head_len = sizeof(dns_header_t); ^ 37、/* warning: unused variable ‘dns_head_len’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_upstream_ip’: /opt/upgw/daemon/nts/nts_edit.c:798:16: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM UPSTR TO DNS, proto-type:IP, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, ring->ring->name); ^ /opt/upgw/daemon/nts/nts_edit.c:816:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM UPSTR TO ENGRESS, proto-type:IP, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, egress_ring->ring->name); ^ /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_downstream_ip’: /opt/upgw/daemon/nts/nts_edit.c:874:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM DWSTR TO ENGRESS, proto-type:IP, to_ring:%s\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, egress_ring->ring->name); ^ 38、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_edge_arp_check’: /opt/upgw/daemon/nts/nts_edit.c:1065:5: warning: return makes pointer from integer without a cast [enabled by default] return NES_FAIL; ^ 39、/* warning: return makes pointer from integer without a cast */ 原因:函数定义的返回值和实际返回值不是一个类型。 修改方法:返回值和定义的类型改为一致,变为int。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_edge_arp_edit’: /opt/upgw/daemon/nts/nts_edit.c:1075:12: warning: missing braces around initializer [-Wmissing-braces] struct dns_lbp_data_s lbp = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1075:12: warning: (near initialization for ‘lbp.mac’) [-Wmissing-braces] /opt/upgw/daemon/nts/nts_edit.c:1075:12: warning: missing initializer for field ‘port_id’ of ‘struct dns_lbp_data_s’ [-Wmissing-field-initializers] In file included from /opt/upgw/daemon/nts/nts_edit.c:39:0: /opt/upgw//daemon/nts/nts_domainame.h:78:9: note: ‘port_id’ declared here int port_id; ^ 40、/* warning: missing braces around initializer */ 原因:同33。 修改方法:同33。 /opt/upgw/daemon/nts/nts_edit.c:1110:5: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM LBP TO LBP, proto-type:ARP REPLY, to_ring:%s\n", devices_tab[mbuf->port].device->name, mbuf->udata64, src_ip, dst_ip, dst_ring->ring->name); ^ 41、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c:1075:27: warning: unused variable ‘lbp’ [-Wunused-variable] struct dns_lbp_data_s lbp = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1073:22: warning: unused variable ‘vlan_hdr’ [-Wunused-variable] struct vlan_hdr *vlan_hdr; ^ 42、/* warning: unused variable ‘lbp’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_vm’: /opt/upgw/daemon/nts/nts_edit.c:1209:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM LBP, proto-type:ARP REQUEST\n", devices_tab[mbufs[i]->port].device->name, mbufs[i]->udata64, src_ip, dst_ip); ^ 43、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c:1239:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ 44、/* warning: comparison between signed and unsigned integer expressions */ 原因:同16。 修改方法:将RTE_LOG_DEBUG强转为int类型。 /opt/upgw/daemon/nts/nts_edit.c:1241:17: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM LBP TO ENGRESS, proto-type:GTPU, to_ring:%s\n", devices_tab[mbufs[idx]->port].device->name, mbufs[idx]->udata64, src_ip, dst_ip, egress_ring->ring->name); ^ /opt/upgw/daemon/nts/nts_edit.c:1243:17: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM LBP TO ENGRESS, proto-type:IP, to_ring:%s\n", devices_tab[mbufs[idx]->port].device->name, mbufs[idx]->udata64, src_ip, dst_ip, egress_ring->ring->name); ^ 45、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c: At top level: /opt/upgw/daemon/nts/nts_edit.c:1258:5: warning: no previous prototype for ‘nts_edge_dns_decap_ip’ [-Wmissing-prototypes] int nts_edge_dns_decap_ip(struct rte_mbuf *src_mbuf) ^ 46、/* warning: no previous prototype for ‘nts_edge_dns_decap_ip’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_edge_dns_decap_ip’: /opt/upgw/daemon/nts/nts_edit.c:1266:12: warning: missing braces around initializer [-Wmissing-braces] struct dns_lbp_data_s lbp = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1266:12: warning: (near initialization for ‘lbp.mac’) [-Wmissing-braces] /opt/upgw/daemon/nts/nts_edit.c:1266:12: warning: missing initializer for field ‘port_id’ of ‘struct dns_lbp_data_s’ [-Wmissing-field-initializers] In file included from /opt/upgw/daemon/nts/nts_edit.c:39:0: /opt/upgw//daemon/nts/nts_domainame.h:78:9: note: ‘port_id’ declared here int port_id; ^ 47、/* warning: missing braces around initializer */ 原因:同33。 修改方法:同33。 /opt/upgw/daemon/nts/nts_edit.c:1278:5: warning: implicit declaration of function ‘lbp_data_get’ [-Wimplicit-function-declaration] if(NES_SUCCESS != lbp_data_get(&lbp)){ ^ /opt/upgw/daemon/nts/nts_edit.c:1278:5: warning: nested extern declaration of ‘lbp_data_get’ [-Wnested-externs] 48、/*warning: implicit declaration of function ‘lbp_data_get’ */ /* warning: nested extern declaration of ‘lbp_data_get’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/nts/nts_edit.c:1337:5: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM DNS, proto-type:IP, to_ring:%s\n", devices_tab[src_mbuf->port].device->name, src_mbuf->udata64, dst_ring->ring->name); ^ 49、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c:1340:9: warning: implicit declaration of function ‘dns_pkt_key_invalid_date_clear’ [-Wimplicit-function-declaration] dns_pkt_key_invalid_date_clear(); ^ /opt/upgw/daemon/nts/nts_edit.c:1340:9: warning: nested extern declaration of ‘dns_pkt_key_invalid_date_clear’ [-Wnested-externs] 50、/*warning: implicit declaration of function ‘dns_pkt_key_invalid_date_clear’ */ /* warning: nested extern declaration of ‘dns_pkt_key_invalid_date_clear’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/nts/nts_edit.c:1267:22: warning: unused variable ‘ipv4_hdr’ [-Wunused-variable] struct ipv4_hdr *ipv4_hdr; ^ /opt/upgw/daemon/nts/nts_edit.c:1264:22: warning: unused variable ‘mbuf’ [-Wunused-variable] struct rte_mbuf *mbuf; ^ /opt/upgw/daemon/nts/nts_edit.c:1263:22: warning: unused variable ‘hdr’ [-Wunused-variable] struct rte_mbuf *hdr; ^ /opt/upgw/daemon/nts/nts_edit.c:1262:21: warning: unused variable ‘tcphdr’ [-Wunused-variable] struct tcp_hdr *tcphdr; ^ /opt/upgw/daemon/nts/nts_edit.c:1261:22: warning: unused variable ‘new_iphdr’ [-Wunused-variable] struct ipv4_hdr *new_iphdr, *iphdr; /* Original inner ipv4 header*/ ^ /opt/upgw/daemon/nts/nts_edit.c:1260:23: warning: unused variable ‘new_ethhdr’ [-Wunused-variable] struct ether_hdr *new_ethhdr, *ethhdr; ^ /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_edge_dns_hdr_parse_gtp’: /opt/upgw/daemon/nts/nts_edit.c:1427:17: warning: unused variable ‘dns_head_len’ [-Wunused-variable] int dns_head_len = sizeof(dns_header_t); ^ /opt/upgw/daemon/nts/nts_edit.c:1356:22: warning: variable ‘vlan’ set but not used [-Wunused-but-set-variable] struct vlan_hdr *vlan; ^ /opt/upgw/daemon/nts/nts_edit.c:1355:15: warning: variable ‘inner_src_port’ set but not used [-Wunused-but-set-variable] uint16_t* inner_src_port; ^ 51、/* warning: unused variable ‘ipv4_hdr’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_edit.c: At top level: /opt/upgw/daemon/nts/nts_edit.c:1457:5: warning: no previous prototype for ‘nts_edge_dns_decap_gtp’ [-Wmissing-prototypes] int nts_edge_dns_decap_gtp(struct rte_mbuf *src_mbuf) ^ 52、/* warning: no previous prototype for ‘nts_edge_dns_decap_gtp’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_edge_dns_decap_gtp’: /opt/upgw/daemon/nts/nts_edit.c:1462:12: warning: missing braces around initializer [-Wmissing-braces] struct dns_lbp_data_s lbp = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1462:12: warning: (near initialization for ‘lbp.mac’) [-Wmissing-braces] /opt/upgw/daemon/nts/nts_edit.c:1462:12: warning: missing initializer for field ‘port_id’ of ‘struct dns_lbp_data_s’ [-Wmissing-field-initializers] In file included from /opt/upgw/daemon/nts/nts_edit.c:39:0: /opt/upgw//daemon/nts/nts_domainame.h:78:9: note: ‘port_id’ declared here int port_id; ^ /opt/upgw/daemon/nts/nts_edit.c:1464:12: warning: missing braces around initializer [-Wmissing-braces] struct ether_addr s_addr = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1464:12: warning: (near initialization for ‘s_addr.addr_bytes’) [-Wmissing-braces] 53、/* warning: missing braces around initializer */ /* warning: missing initializer for field ‘port_id’ of ‘struct dns_lbp_data_s’ */ 原因:同33。 修改方法:同33。 /opt/upgw/daemon/nts/nts_edit.c:1538:5: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nts_io, module:flow, portname:%s, index:%llu, traffic-direction:FROM DNS, proto-type:GTPU, to_ring:%s\n", devices_tab[src_mbuf->port].device->name, src_mbuf->udata64, dst_ring->ring->name); ^ 54、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:同32。 修改方法:同32。 /opt/upgw/daemon/nts/nts_edit.c:1470:24: warning: unused variable ‘entry’ [-Wunused-variable] nts_enc_subentry_t entry; ^ /opt/upgw/daemon/nts/nts_edit.c:1463:22: warning: unused variable ‘ipv4_hdr’ [-Wunused-variable] struct ipv4_hdr *ipv4_hdr; ^ 55、/* warning: unused variable ‘entry’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_edit.c: At top level: /opt/upgw/daemon/nts/nts_edit.c:1546:5: warning: no previous prototype for ‘nts_edge_dns_decap’ [-Wmissing-prototypes] int nts_edge_dns_decap(struct rte_mbuf *src_mbuf) ^ 56、/* warning: no previous prototype for ‘nts_edge_dns_decap’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_edge_dns_decap’: /opt/upgw/daemon/nts/nts_edit.c:1556:12: warning: missing braces around initializer [-Wmissing-braces] struct dns_lbp_data_s lbp = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1556:12: warning: (near initialization for ‘lbp.mac’) [-Wmissing-braces] /opt/upgw/daemon/nts/nts_edit.c:1556:12: warning: missing initializer for field ‘port_id’ of ‘struct dns_lbp_data_s’ [-Wmissing-field-initializers] In file included from /opt/upgw/daemon/nts/nts_edit.c:39:0: /opt/upgw//daemon/nts/nts_domainame.h:78:9: note: ‘port_id’ declared here int port_id; ^ 57、/* missing braces around initializer */ 原因:同33。 修改方法:同33。 /opt/upgw/daemon/nts/nts_edit.c:1565:9: warning: unused variable ‘ret’ [-Wunused-variable] int ret = NES_SUCCESS; ^ /opt/upgw/daemon/nts/nts_edit.c:1563:14: warning: unused variable ‘edge_dns_ip’ [-Wunused-variable] uint32_t edge_dns_ip = 0; ^ /opt/upgw/daemon/nts/nts_edit.c:1562:14: warning: unused variable ‘transaction’ [-Wunused-variable] uint16_t transaction = 0; ^ /opt/upgw/daemon/nts/nts_edit.c:1561:21: warning: unused variable ‘tuple’ [-Wunused-variable] nts_acl_tuple_t tuple; ^ /opt/upgw/daemon/nts/nts_edit.c:1560:24: warning: unused variable ‘entry’ [-Wunused-variable] nts_enc_subentry_t entry; ^ /opt/upgw/daemon/nts/nts_edit.c:1558:10: warning: unused variable ‘domain_name’ [-Wunused-variable] char domain_name[DOMAIN_NAME_SUPPORT_MAX] = {0}; ^ /opt/upgw/daemon/nts/nts_edit.c:1553:22: warning: unused variable ‘ip_hdr’ [-Wunused-variable] struct ipv4_hdr *ip_hdr; ^ /opt/upgw/daemon/nts/nts_edit.c:1552:22: warning: unused variable ‘mbuf’ [-Wunused-variable] struct rte_mbuf *mbuf; ^ /opt/upgw/daemon/nts/nts_edit.c:1551:22: warning: unused variable ‘hdr’ [-Wunused-variable] struct rte_mbuf *hdr; ^ /opt/upgw/daemon/nts/nts_edit.c:1550:21: warning: unused variable ‘tcphdr’ [-Wunused-variable] struct tcp_hdr *tcphdr; ^ /opt/upgw/daemon/nts/nts_edit.c:1549:34: warning: unused variable ‘iphdr’ [-Wunused-variable] struct ipv4_hdr *new_iphdr, *iphdr; /* Original inner ipv4 header*/ ^ /opt/upgw/daemon/nts/nts_edit.c:1549:22: warning: unused variable ‘new_iphdr’ [-Wunused-variable] struct ipv4_hdr *new_iphdr, *iphdr; /* Original inner ipv4 header*/ ^ /opt/upgw/daemon/nts/nts_edit.c:1548:23: warning: unused variable ‘new_ethhdr’ [-Wunused-variable] struct ether_hdr *new_ethhdr, *ethhdr; ^ 58、/* warning: unused variable ‘ret’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_edit.c: At top level: /opt/upgw/daemon/nts/nts_edit.c:1609:5: warning: no previous prototype for ‘nts_flow_edge_dns’ [-Wmissing-prototypes] int nts_flow_edge_dns(nes_ring_t *ingress_ring, void **buffer, int mbuf_num) ^ 59、/* warning: no previous prototype for ‘nts_flow_edge_dns’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_edge_dns’: /opt/upgw/daemon/nts/nts_edit.c:1609:35: warning: unused parameter ‘ingress_ring’ [-Wunused-parameter] int nts_flow_edge_dns(nes_ring_t *ingress_ring, void **buffer, int mbuf_num) ^ 60、/* warning: unused parameter ‘ingress_ring’ */ 原因:函数中定义的入参没有使用到。 修改方法:为了保证注册函数的一致性,这里不能删除入参,所以增加了对ingress_ring的判断代码: if (NULL == ingress_ring) { return ret; } /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_upstream_gtp’: /opt/upgw/daemon/nts/nts_edit.c:319:25: warning: ‘inner_ipv4_hdr’ may be used uninitialized in this function [-Wmaybe-uninitialized] if((*inner_ipv4_hdr)->next_proto_id == IP_PROTO_UDP){ ^ /opt/upgw/daemon/nts/nts_edit.c:454:22: note: ‘inner_ipv4_hdr’ was declared here struct ipv4_hdr *inner_ipv4_hdr; ^ /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_flow_downstream_gtp’: /opt/upgw/daemon/nts/nts_edit.c:589:49: warning: ‘inner_ipv4_hdr’ may be used uninitialized in this function [-Wmaybe-uninitialized] nes_lookup_entry_find(lookup->learning, &inner_ipv4_hdr->dst_addr, (void**) &entry); ^ /opt/upgw/daemon/nts/nts_edit.c: In function ‘nts_get_dst_ring’: /opt/upgw/daemon/nts/nts_edit.c:211:44: warning: ‘inner_ipv4_hdr’ may be used uninitialized in this function [-Wmaybe-uninitialized] tuple->inner_ip_src = (*inner_ipv4_hdr)->src_addr; ^ /opt/upgw/daemon/nts/nts_edit.c:627:22: note: ‘inner_ipv4_hdr’ was declared here struct ipv4_hdr *inner_ipv4_hdr; ^ 61、/* warning: ‘inner_ipv4_hdr’ may be used uninitialized in this function */ 原因:inner_ipv4_hdr指针未初始化。 修改方法:inner_ipv4_hdr赋予初值NULL。 CC nts/nts_lookup.o CC ctrl/nes_ctrl.o /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘is_uuid_string’: /opt/upgw/daemon/ctrl/nes_ctrl.c:102:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (i = 0; i < sizeof(fmt); i++) { ^ 62、/* warning: comparison between signed and unsigned integer expressions */ 原因:同16。 修改方法:修改i为size_t类型。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_ctrl_route_add_impl’: /opt/upgw/daemon/ctrl/nes_ctrl.c:468:21: warning: passing argument 1 of ‘nes_uuid_lookup_entry_add’ from incompatible pointer type [enabled by default] &uuid_data)) { ^ In file included from /opt/upgw/daemon/ctrl/nes_ctrl.c:49:0: /opt/upgw//daemon/ctrl/nes_uuid_lookup.h:27:5: note: expected ‘const char *’ but argument is of type ‘char (*)[37]’ int nes_uuid_lookup_entry_add(const char *, struct uuid_entry *data); ^ 63、/* warning: passing argument 1 of ‘nes_uuid_lookup_entry_add’ from incompatible pointer type */ 原因:传参类型不正确。 修改方法:传入参数时强转为为const char *类型。 /opt/upgw/daemon/ctrl/nes_ctrl.c:484:9: warning: implicit declaration of function ‘nes_acl_ether_to_str’ [-Wimplicit-function-declaration] if (NES_SUCCESS != nes_acl_ether_to_str(ether_addr_str, &data->vm_mac_addr)) { ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:484:9: warning: nested extern declaration of ‘nes_acl_ether_to_str’ [-Wnested-externs] 64、/* warning: implicit declaration of function ‘nes_acl_ether_to_str’ */ /* warning: nested extern declaration of ‘nes_acl_ether_to_str’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/ctrl/nes_ctrl.c:419:17: warning: unused variable ‘entry_deleted’ [-Wunused-variable] static char entry_deleted[] = "Deleted"; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:418:17: warning: unused variable ‘section_name’ [-Wunused-variable] static char section_name[] = TRAFFIC_RULE_ENTRY; ^ 65、/* warning: unused variable ‘entry_deleted’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_ctrl_domain_name_add_impl’: /opt/upgw/daemon/ctrl/nes_ctrl.c:679:5: warning: implicit declaration of function ‘prepare_dns_rule_entries’ [-Wimplicit-function-declaration] if (NES_FAIL == prepare_dns_rule_entries(req_data->lookup, &domainame_entry)) { ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:679:5: warning: nested extern declaration of ‘prepare_dns_rule_entries’ [-Wnested-externs] 66、/* warning: implicit declaration of function ‘prepare_dns_rule_entries’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_domainame_del’: /opt/upgw/daemon/ctrl/nes_ctrl.c:711:5: warning: pointer targets in passing argument 1 of ‘is_uuid_string’ differ in signedness [-Wpointer-sign] if (NES_FAIL == is_uuid_string(api_msg->data)) { ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:96:12: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ static int is_uuid_string(const char *uuid) ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:724:5: warning: pointer targets in passing argument 2 of ‘sync_get_one_rule’ differ in signedness [-Wpointer-sign] if (NES_FAIL == sync_get_one_rule(DNS_RULE, api_msg->data, &dns_rule)) { ^ In file included from /opt/upgw/daemon/ctrl/nes_ctrl.c:60:0: /opt/upgw//libs/libnes_redis/libnes_redis.h:52:5: note: expected ‘char *’ but argument is of type ‘uint8_t *’ int sync_get_one_rule(uint8_t type, char *uuid, nes_rule_t *rule); ^ /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_domainame_show’: /opt/upgw/daemon/ctrl/nes_ctrl.c:764:5: warning: pointer targets in passing argument 1 of ‘is_uuid_string’ differ in signedness [-Wpointer-sign] if (NES_FAIL == is_uuid_string(api_msg->data)) { ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:96:12: note: expected ‘const char *’ but argument is of type ‘uint8_t *’ static int is_uuid_string(const char *uuid) ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:781:5: warning: pointer targets in passing argument 2 of ‘sync_get_one_rule’ differ in signedness [-Wpointer-sign] if (NES_FAIL == sync_get_one_rule(DNS_RULE, api_msg->data, &dns_rule)) { ^ In file included from /opt/upgw/daemon/ctrl/nes_ctrl.c:60:0: /opt/upgw//libs/libnes_redis/libnes_redis.h:52:5: note: expected ‘char *’ but argument is of type ‘uint8_t *’ int sync_get_one_rule(uint8_t type, char *uuid, nes_rule_t *rule); ^ 67、/* warning: pointer targets in passing argument 1 of ‘is_uuid_string’ differ in signedness */ 原因:同63。 修改方法:强转为需要的类型。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_domainame_list’: /opt/upgw/daemon/ctrl/nes_ctrl.c:814:9: warning: unused variable ‘j’ [-Wunused-variable] int j = 0; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:812:27: warning: unused variable ‘route_list_req’ [-Wunused-variable] nes_route_list_req_t *route_list_req; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:809:14: warning: unused variable ‘entry_cnt’ [-Wunused-variable] uint32_t entry_cnt = 0; ^ 68、/* warning: unused variable ‘j’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_sync_data’: /opt/upgw/daemon/ctrl/nes_ctrl.c:837:52: warning: unused parameter ‘api_msg’ [-Wunused-parameter] static nes_api_msg_t *nes_sync_data(nes_api_msg_t *api_msg) ^ 69、/* warning: unused parameter ‘api_msg’ */ 原因:同60。 修改方法:删除该参数。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_bypass_server’: /opt/upgw/daemon/ctrl/nes_ctrl.c:1002:5: warning: implicit declaration of function ‘parse’ [-Wimplicit-function-declaration] if (NES_SUCCESS != parse(lookup_entries, bypass_parameter_list)) { ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:1002:5: warning: nested extern declaration of ‘parse’ [-Wnested-externs] 70、/* warning: implicit declaration of function ‘parse’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/ctrl/nes_ctrl.c: In function ‘nes_ctrl_route_del_by_uuid’: /opt/upgw/daemon/ctrl/nes_ctrl.c:1262:9: warning: unused variable ‘del_success’ [-Wunused-variable] int del_success = NES_FAIL; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:1261:14: warning: unused variable ‘i’ [-Wunused-variable] int ret, i; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:1260:30: warning: unused variable ‘route_entries’ [-Wunused-variable] struct rte_cfgfile_entry route_entries[MAX_LOOKUPS_PER_VM]; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:1259:17: warning: unused variable ‘entry_deleted’ [-Wunused-variable] static char entry_deleted[] = "Deleted"; ^ /opt/upgw/daemon/ctrl/nes_ctrl.c:1258:17: warning: unused variable ‘section_name’ [-Wunused-variable] static char section_name[] = TRAFFIC_RULE_ENTRY; ^ 71、/* warning: unused variable ‘del_success’ */ 原因:同2。 修改方法:同2。 In file included from /opt/upgw/daemon/ctrl/nes_ctrl.c:42:0: /opt/upgw/daemon/ctrl/nes_ctrl.c: At top level: /opt/upgw//daemon/io/nes_dev_kni.h:22:29: warning: ‘nes_dev_kni_alloc’ declared ‘static’ but never defined [-Wunused-function] NES_STATIC struct rte_kni * nes_dev_kni_alloc(uint16_t port_id, const char* if_id); ^ In file included from /opt/upgw/daemon/ctrl/nes_ctrl.c:60:0: /opt/upgw//libs/libnes_redis/libnes_redis.h:12:13: warning: ‘REDIS_HOST’ defined but not used [-Wunused-variable] static char REDIS_HOST[50]; ^ /opt/upgw//libs/libnes_redis/libnes_redis.h:13:17: warning: ‘REDIS_PORT’ defined but not used [-Wunused-variable] static uint16_t REDIS_PORT; ^ 72、/* ‘nes_dev_kni_alloc’ declared ‘static’ but never defined [-Wunused-function] */ /* warning: ‘REDIS_HOST’ defined but not used [-Wunused-variable] */ 原因:static修饰的函数和变量已经在.c文件中定义,不需要在.h声明,若没有static修饰,可以在.h声明,变量声明必须要用extern修饰。 修改方法:将这几处删除。 CC nes_main.o /opt/upgw/daemon/nes_main.c:147:6: warning: function declaration isn’t a prototype [-Wstrict-prototypes] void nes_bypass_reset_wd() ^ /opt/upgw/daemon/nes_main.c: In function ‘nes_bypass_reset_wd’: /opt/upgw/daemon/nes_main.c:147:6: warning: old-style function definition [-Wold-style-definition] 73、/* warning: function declaration isn’t a prototype */ /* warning: old-style function definition */ 原因:同14。 修改方法:同14。 /opt/upgw/daemon/nes_main.c:159:34: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] bypass_parameter_list[0] = "all"; ^ /opt/upgw/daemon/nes_main.c:160:34: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] bypass_parameter_list[1] = "reset_bypass_wd"; ^ /opt/upgw/daemon/nes_main.c:177:38: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default] bypass_parameter_list[1] = "reset_bypass_wd"; ^ 74、/* warning: assignment discards ‘const’ qualifier from pointer target type */ 原因:赋值时两端类型不一致。 修改方法:定义bypass_parameter_list时加上const,后续的用此参数的函数也加const关键词。 /opt/upgw/daemon/nes_main.c: In function ‘main’: /opt/upgw/daemon/nes_main.c:254:5: warning: passing argument 1 of ‘init_redis_config’ discards ‘const’ qualifier from pointer target type [enabled by default] init_redis_config(redis_host, atoi(redis_port)); ^ In file included from /opt/upgw/daemon/nes_main.c:38:0: /opt/upgw//libs/libnes_redis/libnes_redis.h:32:6: note: expected ‘char *’ but argument is of type ‘const char *’ void init_redis_config(char *host, uint16_t port); ^ 75、/* warning: passing argument 1 of ‘init_redis_config’ discards ‘const’ qualifier from pointer target type */ /* note: expected ‘char *’ but argument is of type ‘const char * */ 原因:同63。 修改方法:init_redis_config定义时第一个参数加const修饰。 /opt/upgw/daemon/nes_main.c:311:21: warning: implicit declaration of function ‘nes_routefile_close’ [-Wimplicit-function-declaration] nes_routefile_close(); ^ /opt/upgw/daemon/nes_main.c:311:21: warning: nested extern declaration of ‘nes_routefile_close’ [-Wnested-externs] 76、/* warning: implicit declaration of function ‘nes_routefile_close’ */ /* warning: nested extern declaration of ‘nes_routefile_close’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/nes_main.c:192:13: warning: unused variable ‘nes_route_file’ [-Wunused-variable] char *nes_route_file = NULL; ^ 77、/* warning: unused variable ‘nes_route_file’ */ 原因:同2。 修改方法:同2。 In file included from /opt/upgw/daemon/nes_main.c:27:0: /opt/upgw/daemon/nes_main.c: At top level: /opt/upgw/daemon/io/nes_dev_kni.h:22:29: warning: ‘nes_dev_kni_alloc’ declared ‘static’ but never defined [-Wunused-function] NES_STATIC struct rte_kni * nes_dev_kni_alloc(uint16_t port_id, const char* if_id); ^ In file included from /opt/upgw/daemon/nes_main.c:38:0: /opt/upgw//libs/libnes_redis/libnes_redis.h:12:13: warning: ‘REDIS_HOST’ defined but not used [-Wunused-variable] static char REDIS_HOST[50]; ^ /opt/upgw//libs/libnes_redis/libnes_redis.h:13:17: warning: ‘REDIS_PORT’ defined but not used [-Wunused-variable] static uint16_t REDIS_PORT; ^ 78、/* warning: ‘nes_dev_kni_alloc’ declared ‘static’ but never defined */ /* warning: ‘REDIS_HOST’ defined but not used */ 原因:同72。 修改方法:同72。 CC nes_ring.o CC nes_ring_lookup.o CC ctrl/nes_tcp_connection.o CC ctrl/nes_configuration.o CC ctrl/nes_uuid_lookup.o /opt/upgw/daemon/ctrl/nes_uuid_lookup.c:54:5: warning: no previous prototype for ‘nes_uuid_lookup_entry_get’ [-Wmissing-prototypes] int nes_uuid_lookup_entry_get(const char *route_rule_uuid, struct uuid_entry **data) ^ 79、/* warning: no previous prototype for ‘nes_uuid_lookup_entry_get’ */ 原因:同1。 修改方法:在对应.h文件中声明。 /opt/upgw/daemon/ctrl/nes_uuid_lookup.c: In function ‘nes_uuid_lookup_entry_del’: /opt/upgw/daemon/ctrl/nes_uuid_lookup.c:76:10: warning: unused variable ‘route_rule_uuid_str’ [-Wunused-variable] char route_rule_uuid_str[UUID_STR_LEN]; ^ 80、/* warning: unused variable ‘route_rule_uuid_str’ */ 原因:同2。 修改方法:同2。 CC nts/nts_acl.o /opt/upgw/daemon/nts/nts_acl.c: In function ‘nes_routefile_parse_entryname’: /opt/upgw/daemon/nts/nts_acl.c:150:9: warning: passing argument 1 of ‘rte_strsplit’ discards ‘const’ qualifier from pointer target type [enabled by default] MAX_LOOKUP_ENTRIES, ','); ^ In file included from /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_acl_osdep.h:45:0, from /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_acl.h:14, from /opt/upgw/daemon/nts/nts_acl.c:16: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_string_fns.h:47:1: note: expected ‘char *’ but argument is of type ‘const char *’ rte_strsplit(char *string, int stringlen, ^ 81、/* warning: passing argument 1 of ‘rte_strsplit’ discards ‘const’ qualifier from pointer target type */ 原因:同63。 修改方法:因为rte_strsplit是dpdk库函数,不能做修改,所以将传入参数的类型修改为非const。 /opt/upgw/daemon/nts/nts_acl.c:147:13: warning: unused variable ‘i’ [-Wunused-variable] uint8_t i, pairs_cnt; ^ 82、/* warning: unused variable ‘i’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_acl.c: In function ‘nes_database_parse_entry’: /opt/upgw/daemon/nts/nts_acl.c:170:9: warning: passing argument 1 of ‘rte_strsplit’ discards ‘const’ qualifier from pointer target type [enabled by default] MAX_LOOKUP_ENTRIES, ';'); ^ In file included from /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_acl_osdep.h:45:0, from /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_acl.h:14, from /opt/upgw/daemon/nts/nts_acl.c:16: /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_string_fns.h:47:1: note: expected ‘char *’ but argument is of type ‘const char *’ rte_strsplit(char *string, int stringlen, ^ 83、/* warning: passing argument 1 of ‘rte_strsplit’ discards ‘const’ qualifier from pointer target type */ 原因:同63。 修改方法:因为rte_strsplit是dpdk库函数,不能做修改,所以将传入参数的类型修改为非const。 /opt/upgw/daemon/nts/nts_acl.c:174:9: warning: passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default] strip(entry_lookup_data, strlen(&addr_rule_pairs[1])); ^ In file included from /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_acl_osdep.h:19:0, from /opt/dpdk-18.08/x86_64-native-linuxapp-gcc/include/rte_acl.h:14, from /opt/upgw/daemon/nts/nts_acl.c:16: /usr/include/string.h:395:15: note: expected ‘const char *’ but argument is of type ‘char **’ extern size_t strlen (const char *__s) ^ 84、/* warning: passing argument 1 of ‘strlen’ from incompatible pointer type */ 原因:同63。 修改方法:同63。 /opt/upgw/daemon/nts/nts_acl.c:167:13: warning: unused variable ‘i’ [-Wunused-variable] uint8_t i, pairs_cnt; ^ 85、/* warning: unused variable ‘i’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_acl.c: In function ‘nts_acl_lookup_init’: /opt/upgw/daemon/nts/nts_acl.c:209:5: warning: implicit declaration of function ‘nts_acl_restore_dataplane_entries’ [-Wimplicit-function-declaration] if (NES_SUCCESS != nts_acl_restore_dataplane_entries(lookup_ctx)) { ^ /opt/upgw/daemon/nts/nts_acl.c:209:5: warning: nested extern declaration of ‘nts_acl_restore_dataplane_entries’ [-Wnested-externs] 86、/* warning: implicit declaration of function ‘nts_acl_restore_dataplane_entries’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/nts/nts_acl.c: At top level: /opt/upgw/daemon/nts/nts_acl.c:591:5: warning: no previous prototype for ‘nts_acl_restore_dataplane_entries’ [-Wmissing-prototypes] int nts_acl_restore_dataplane_entries(nes_acl_ctx_t* lookup_ctx) { ^ 87、/* warning: no previous prototype for ‘nts_acl_restore_dataplane_entries’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_acl.c: In function ‘nts_acl_restore_dataplane_entries’: /opt/upgw/daemon/nts/nts_acl.c:667:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(i = 0; i <= rule_cnt-1; i++){ ^ 88、/* warning: comparison between signed and unsigned integer expressions */ 原因:同16。 修改方法:修改i的变量类型。 /opt/upgw/daemon/nts/nts_acl.c:698:13: warning: implicit declaration of function ‘nes_uuid_lookup_entry_get’ [-Wimplicit-function-declaration] if (NES_SUCCESS == nes_uuid_lookup_entry_get(rules[i].uuid, &lookup_entry_data)) ^ /opt/upgw/daemon/nts/nts_acl.c:698:13: warning: nested extern declaration of ‘nes_uuid_lookup_entry_get’ [-Wnested-externs] 89、/* warning: implicit declaration of function ‘nes_uuid_lookup_entry_get’ */ 原因:同35。 修改方法:同35。 /opt/upgw/daemon/nts/nts_acl.c:597:10: warning: unused variable ‘route_rule_uuid’ [-Wunused-variable] char route_rule_uuid[UUID_STR_LEN]; ^ /opt/upgw/daemon/nts/nts_acl.c:594:17: warning: unused variable ‘section_name’ [-Wunused-variable] static char section_name[] = TRAFFIC_RULE_ENTRY; ^ /opt/upgw/daemon/nts/nts_acl.c:592:31: warning: unused variable ‘route_entries’ [-Wunused-variable] struct rte_cfgfile_entry route_entries[MAX_LOOKUPS_PER_VM]; ^ 90、/* warning: unused variable ‘route_rule_uuid’ */ 原因:同2。 修改方法:同2。 In file included from /opt/upgw/daemon/nts/nts_acl.c:28:0: /opt/upgw/daemon/nts/nts_acl.c: At top level: /opt/upgw//libs/libnes_redis/libnes_redis.h:12:13: warning: ‘REDIS_HOST’ defined but not used [-Wunused-variable] static char REDIS_HOST[50]; ^ /opt/upgw//libs/libnes_redis/libnes_redis.h:13:17: warning: ‘REDIS_PORT’ defined but not used [-Wunused-variable] static uint16_t REDIS_PORT; ^ /opt/upgw/daemon/nts/nts_acl.c:143:12: warning: ‘nes_routefile_parse_entryname’ defined but not used [-Wunused-function] static int nes_routefile_parse_entryname(const char *entry_name, char *uuid_str, ^ /opt/upgw/daemon/nts/nts_acl.c:496:1: warning: ‘nts_acl_add_single_dataplane_entry’ defined but not used [-Wunused-function] nts_acl_add_single_dataplane_entry(nes_acl_ctx_t* lookup_ctx, char *port_name, char *tx_ring_name) ^ 91、/* warning: ‘REDIS_HOST’ defined but not used */ 原因:变量定义后未被使用。 修改方法:删除此变量。 CC nts/nts_acl_cfg.o /opt/upgw/daemon/nts/nts_acl_cfg.c:165:1: warning: no previous prototype for ‘nes_acl_ether_to_str’ [-Wmissing-prototypes] nes_acl_ether_to_str(char *mac, const struct ether_addr *ether_address) { ^ /opt/upgw/daemon/nts/nts_acl_cfg.c: In function ‘nts_acl_cfg_lookup_prepare’: /opt/upgw/daemon/nts/nts_acl_cfg.c:551:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (j = 0; j < strlen(value); j++) { ^ 92、/* warning: no previous prototype for ‘nes_acl_ether_to_str’ */ 原因:同16。 修改方法:修改i为size_t类型。 CC dns/nes_dns_hosts.o CC dns/nes_dns_config.o CC dns/nes_dns_tools.o CC dns/nes_dns.o CC nes_arp.o CC nes_latency.o CC io/nes_io.o CC io/nes_mac_lookup.o CC io/nes_dev_eth.o /opt/upgw/daemon/io/nes_dev_eth.c: In function ‘recv_eth’: /opt/upgw/daemon/io/nes_dev_eth.c:208:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:212:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:recv, portname:%s, index:%llu", self->name, self->rx_pkts[i]->udata64); ^ /opt/upgw/daemon/io/nes_dev_eth.c: In function ‘send_eth’: /opt/upgw/daemon/io/nes_dev_eth.c:241:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:243:26: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 6 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:send remaining, from portname:%s, to portname:%s, index:%llu, from ring:%s", devices_tab[self->tx_buffer[j]->port].device->name, self->name, self->tx_buffer[j]->udata64, tx_ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_eth.c:265:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:267:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 6 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:send less, from portname:%s, to portname:%s, index:%llu, from ring:%s", devices_tab[buf[j]->port].device->name, self->name, buf[j]->udata64, tx_ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_eth.c:272:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:274:17: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 6 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:send, from portname:%s, to portname:%s, index:%llu, from ring:%s", devices_tab[buf[j]->port].device->name, self->name, buf[j]->udata64, tx_ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_eth.c: In function ‘send_eth_mtu’: /opt/upgw/daemon/io/nes_dev_eth.c:304:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:306:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 6 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:send mtu remaining, from portname:%s, to portname:%s, index:%llu, from ring:%s", devices_tab[self->rx_pkts[i]->port].device->name, self->name, self->rx_pkts[i]->udata64, tx_ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_eth.c:403:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:405:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 6 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:send mtu less, from portname:%s, to portname:%s, index:%llu, from ring:%s", devices_tab[buf_to_send[i]->port].device->name, self->name, buf_to_send[i]->udata64, tx_ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_eth.c:410:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_eth.c:412:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 6 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:send mtu, to portname:%s, from portname:%s, index:%llu, from ring:%s", devices_tab[buf_to_send[i]->port].device->name, self->name, buf_to_send[i]->udata64, tx_ring->ring->name); ^ CC io/nes_dev_vhost.o CC io/nes_dev_kni.o CC io/nes_dev_port.o /opt/upgw/daemon/io/nes_dev_port.c: In function ‘scatter_eth_packets’: /opt/upgw/daemon/io/nes_dev_port.c:216:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:218:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, traffic-direction:FROM UPSTR, proto-type:NO ETHER_TYPE_IPv4, to_ring:%s", self->name, self->rx_pkts[i]->udata64, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:220:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, traffic-direction:FROM DWSTR, proto-type:NO ETHER_TYPE_IPv4, to_ring:%s", self->name, self->rx_pkts[i]->udata64, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:264:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:266:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:SCTP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:268:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:SCTP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:274:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:SCTP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:278:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:SCTP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:290:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:292:33: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:294:33: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:302:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:308:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:313:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:315:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:LTE WITHOUT UDP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:317:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:LTE WITHOUT UDP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:342:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:344:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:GTPU, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:346:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:GTPU, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:352:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:GTPU, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:356:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:GTPU, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:364:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:366:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:GTPC, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:368:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:GTPC, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:374:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:GTPC, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:378:21: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:GTPC, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:388:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:390:33: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:392:33: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:400:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:406:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:411:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:413:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:LTE WITH UDP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:415:29: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:LTE WITH UDP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:426:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:428:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:430:25: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:436:17: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM UPSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:440:17: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, srcip:%s, dstip:%s, traffic-direction:FROM DWSTR, proto-type:IP, to_ring:%s", self->name, self->rx_pkts[i]->udata64, src_ip, dst_ip, ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c: In function ‘scatter_eth_lbp’: /opt/upgw/daemon/io/nes_dev_port.c:511:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:513:17: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter less, portname:%s, index:%llu, traffic-direction:FROM LBP, to_ring:%s", self->name, self->rx_pkts[j]->udata64, rx_ring->ring->name); ^ /opt/upgw/daemon/io/nes_dev_port.c:523:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (RTE_LOG_DEBUG <= rte_log_get_level(logtype_nes)) { ^ /opt/upgw/daemon/io/nes_dev_port.c:525:13: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ [-Wformat=] NES_LOG(DEBUG, "thread:nes_io, module:scatter, portname:%s, index:%llu, traffic-direction:FROM LBP, to_ring:%s", self->name, self->rx_pkts[j]->udata64, rx_ring->ring->name); ^ 93、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:同32。 修改方法:同32。 94、/* warning: comparison between signed and unsigned integer expressions */ 原因:同16。 修改方法:将RTE_LOG_DEBUG强转为int类型。 CC io/nes_dev_addons.o CC nts/nts_domainame.o /opt/upgw/daemon/nts/nts_domainame.c:10:5: warning: no previous prototype for ‘nes_dns_pkt_key_lookup_init’ [-Wmissing-prototypes] int nes_dns_pkt_key_lookup_init(void) ^ /opt/upgw/daemon/nts/nts_domainame.c:28:5: warning: no previous prototype for ‘nes_uuid_domainame_lookup_init’ [-Wmissing-prototypes] int nes_uuid_domainame_lookup_init(void) ^ 95、/* warning: no previous prototype for ‘nes_dns_pkt_key_lookup_init’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_domainame.c:124:5: warning: no previous prototype for ‘nes_domainname_lookup_entry_get’ [-Wmissing-prototypes] int nes_domainname_lookup_entry_get(const char * name, struct nes_domainame_entry_s **domainame_entry) ^ /opt/upgw/daemon/nts/nts_domainame.c:168:5: warning: no previous prototype for ‘prepare_dns_rule_entries’ [-Wmissing-prototypes] int prepare_dns_rule_entries(const char *lookup_str, ^ 96、/* warning: no previous prototype for ‘nes_domainname_lookup_entry_get’ */ 原因:同1。 修改方法:在对应的.h里面声明。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘nes_domainame_entry_add’: /opt/upgw/daemon/nts/nts_domainame.c:272:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&nes_uuid_domainame_lookup_table, uuid, &uuid_domainame_entry_c)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_uuid_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:279:5: warning: passing argument 3 of ‘nes_lookup_entry_get’ from incompatible pointer type [enabled by default] if (NES_SUCCESS == nes_lookup_entry_get(&nes_uuid_domainame_lookup_table, uuid, &uuid_domainame_entry_c)) { ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:69:6: note: expected ‘void **’ but argument is of type ‘struct nes_uuid_domainame_entry_s **’ int nes_lookup_entry_get(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:294:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if (NES_SUCCESS == nes_lookup_entry_find(&nes_domainame_lookup_table, domainame_entry->domain_name, &domainame_entry_c)) { ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:299:5: warning: passing argument 3 of ‘nes_lookup_entry_get’ from incompatible pointer type [enabled by default] else if (NES_SUCCESS == nes_lookup_entry_get(&nes_domainame_lookup_table, domainame_entry->domain_name, &domainame_entry_c)) { ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:69:6: note: expected ‘void **’ but argument is of type ‘struct nes_domainame_entry_s **’ int nes_lookup_entry_get(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:269:10: warning: unused variable ‘domain_name_ori’ [-Wunused-variable] char domain_name_ori[DOMAIN_NAME_MAX_LEN + 1] = {0}; ^ /opt/upgw/daemon/nts/nts_domainame.c: In function ‘nes_domainame_entry_del’: /opt/upgw/daemon/nts/nts_domainame.c:321:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&nes_uuid_domainame_lookup_table, uuid, &uuid_domainame_entry_c)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_uuid_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:341:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&nes_domainame_lookup_table, domain_name, ¤t_entry)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:340:14: warning: unused variable ‘relate_cnt’ [-Wunused-variable] uint32_t relate_cnt = 0; ^ /opt/upgw/daemon/nts/nts_domainame.c: In function ‘nes_domainame_entry_show’: /opt/upgw/daemon/nts/nts_domainame.c:366:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&nes_uuid_domainame_lookup_table, uuid, &uuid_domainame_entry_c)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_uuid_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:378:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if (NES_SUCCESS == nes_lookup_entry_find(&nes_domainame_lookup_table, domain_name, ¤t_entry)) { ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c:360:17: warning: unused variable ‘entry_cnt’ [-Wunused-variable] uint32_t i, entry_cnt = 0; ^ /opt/upgw/daemon/nts/nts_domainame.c:360:14: warning: unused variable ‘i’ [-Wunused-variable] uint32_t i, entry_cnt = 0; ^ 97、/* warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type */ 原因:定义参数和传入参数类型不一致。 修改方法:传参时强转为void **。 98、/* warning: unused variable ‘relate_cnt’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_domainame.c:358:105: warning: unused parameter ‘domainame_entry’ [-Wunused-parameter] int nes_domainame_entry_show(char * uuid, nes_dns_data_t *nes_domainames, struct nes_domainame_entry_s *domainame_entry, uint32_t cnt) ^ /opt/upgw/daemon/nts/nts_domainame.c:358:131: warning: unused parameter ‘cnt’ [-Wunused-parameter] int nes_domainame_entry_show(char * uuid, nes_dns_data_t *nes_domainames, struct nes_domainame_entry_s *domainame_entry, uint32_t cnt) ^ 99、/* warning: unused parameter ‘cnt’ */ 原因:同60。 修改方法:删除该参数。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘nes_domainame_entry_list’: /opt/upgw/daemon/nts/nts_domainame.c:402:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (j = 0; j <= nes_uuid_domainame_lookup_table.number_of_entries; j++) { ^ 100、/* warning: comparison between signed and unsigned integer expressions */ 原因:同16。 修改方法:修改j的变量类型。 /opt/upgw/daemon/nts/nts_domainame.c:408:9: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&nes_domainame_lookup_table, uuid_domainame_entry_c->domain_name, ¤t_entry)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ 101、/* warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type */ 原因:同97。 修改方法:同97。 /opt/upgw/daemon/nts/nts_domainame.c:415:5: warning: statement with no effect [-Wunused-value] *cnt == entry_cnt; ^ 102、/* warning: statement with no effect */ 原因:赋值号输错。 修改方法:改为*cnt = entry_cnt。 /opt/upgw/daemon/nts/nts_domainame.c: At top level: /opt/upgw/daemon/nts/nts_domainame.c:442:5: warning: no previous prototype for ‘domainname_check’ [-Wmissing-prototypes] int domainname_check(char * domain_name, uint32_t *ip) ^ 103、/* warning: no previous prototype for ‘domainname_check’ */ 原因:同1。 修改方法:在对应的.h文件中声明。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘domainname_check’: /opt/upgw/daemon/nts/nts_domainame.c:467:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&nes_domainame_lookup_table, domain_name_buf, &domainame_entry)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct nes_domainame_entry_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c: In function ‘dns_pkt_key_add’: /opt/upgw/daemon/nts/nts_domainame.c:485:5: warning: passing argument 3 of ‘nes_lookup_entry_get’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_get(&dns_pkt_key_lookup_table,&dns_pkt_key->transaction_id, &dns_pkt_key_entry_c)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:69:6: note: expected ‘void **’ but argument is of type ‘struct dns_pkt_key_s **’ int nes_lookup_entry_get(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ 104、/* warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type */ 原因:同97。 修改方法:同97。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘dns_pkt_key_del’: /opt/upgw/daemon/nts/nts_domainame.c:497:27: warning: unused variable ‘dns_pkt_key_entry’ [-Wunused-variable] struct dns_pkt_key_s* dns_pkt_key_entry; ^ 105、/* warning: unused variable ‘dns_pkt_key_entry’ */ 原因:同2。 修改方法:同2。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘dns_pkt_key_check’: /opt/upgw/daemon/nts/nts_domainame.c:511:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&dns_pkt_key_lookup_table, transaction_id, &dns_pkt_key_entry)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct dns_pkt_key_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ /opt/upgw/daemon/nts/nts_domainame.c: In function ‘dns_pkt_key_reliability_check’: /opt/upgw/daemon/nts/nts_domainame.c:529:5: warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type [enabled by default] if(NES_SUCCESS == nes_lookup_entry_find(&dns_pkt_key_lookup_table, transaction_id, &dns_pkt_key_entry)){ ^ In file included from /opt/upgw//daemon/nts/nts_lookup.h:19:0, from /opt/upgw//daemon/nes_ring.h:19, from /opt/upgw/daemon/nts/nts_domainame.h:2, from /opt/upgw/daemon/nts/nts_domainame.c:5: /opt/upgw//libs/libnes_lookup/libnes_lookup.h:78:6: note: expected ‘void **’ but argument is of type ‘struct dns_pkt_key_s **’ int nes_lookup_entry_find(nes_lookup_table_t *lookup, const void *key, void **pentry); ^ 106、/* warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type */ 原因:同97。 修改方法:同97。 /opt/upgw/daemon/nts/nts_domainame.c: At top level: /opt/upgw/daemon/nts/nts_domainame.c:555:5: warning: no previous prototype for ‘dns_pkt_key_invalid_date_clear’ [-Wmissing-prototypes] int dns_pkt_key_invalid_date_clear(void) ^ 107、/* warning: no previous prototype for ‘dns_pkt_key_invalid_date_clear’ */ 原因:同1 修改方法:在相应的.h里面增加声明。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘dns_pkt_key_invalid_date_clear’: /opt/upgw/daemon/nts/nts_domainame.c:563:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(i = 0; i <= dns_pkt_key_lookup_table.number_of_entries; i++){ ^ /opt/upgw/daemon/nts/nts_domainame.c:564:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(cnt >= dns_pkt_key_entry_cnt) ^ 108、/* warning: comparison between signed and unsigned integer expressions */ 原因:同16。 修改方法:修改i和cnt的变量类型。 /opt/upgw/daemon/nts/nts_domainame.c: At top level: /opt/upgw/daemon/nts/nts_domainame.c:630:5: warning: no previous prototype for ‘domainame_parse_etheraddr’ [-Wmissing-prototypes] int domainame_parse_etheraddr(const char *buf, void *res, unsigned ressize) ^ 109、/* warning: no previous prototype for ‘domainame_parse_etheraddr’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘domainame_parse_etheraddr’: /opt/upgw/daemon/nts/nts_domainame.c:642:5: warning: implicit declaration of function ‘cmdline_isendoftoken’ [-Wimplicit-function-declaration] while (!cmdline_isendoftoken(buf[token_len])) ^ /opt/upgw/daemon/nts/nts_domainame.c:642:5: warning: nested extern declaration of ‘cmdline_isendoftoken’ [-Wnested-externs] 110、/* warning: implicit declaration of function ‘cmdline_isendoftoken’ */ /* warning: nested extern declaration of ‘cmdline_isendoftoken’ */ 原因:同35 修改方法:同35 /opt/upgw/daemon/nts/nts_domainame.c: At top level: /opt/upgw/daemon/nts/nts_domainame.c:676:5: warning: no previous prototype for ‘lbp_data_get’ [-Wmissing-prototypes] int lbp_data_get(struct dns_lbp_data_s *lbp) ^ 111、/* warning: no previous prototype for ‘lbp_data_get’ */ 原因:同1。 修改方法:在对应的.h中声明。 /opt/upgw/daemon/nts/nts_domainame.c: In function ‘nes_dns_rule_setup’: /opt/upgw/daemon/nts/nts_domainame.c:717:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (i=0; i= dns_pkt_key_entry_cnt) ^ 116、/* warning: ‘cnt’ is used uninitialized in this function */ 原因:cnt未初始化,是一个随机值。 修改方法:cnt赋予初值0。 CC bypass/bpctl.o LD nes-daemon INSTALL-APP nes-daemon INSTALL-MAP nes-daemon.map == client CC nes_cli.o /opt/upgw/client/nes_cli.c: In function ‘nes_ctrl_route_del_parsed’: /opt/upgw/client/nes_cli.c:178:5: warning: implicit declaration of function ‘nes_route_remove_by_uuid’ [-Wimplicit-function-declaration] if (NES_SUCCESS == nes_route_remove_by_uuid(&remote_NEV, res->route_rule_uuid)) ^ /opt/upgw/client/nes_cli.c:178:5: warning: nested extern declaration of ‘nes_route_remove_by_uuid’ [-Wnested-externs] /opt/upgw/client/nes_cli.c: In function ‘nes_ctrl_route_del_mirror_parsed’: /opt/upgw/client/nes_cli.c:188:5: warning: implicit declaration of function ‘nes_route_remove_mirror_by_uuid’ [-Wimplicit-function-declaration] if (NES_SUCCESS == nes_route_remove_mirror_by_uuid(&remote_NEV, res->route_rule_uuid)) ^ /opt/upgw/client/nes_cli.c:188:5: warning: nested extern declaration of ‘nes_route_remove_mirror_by_uuid’ [-Wnested-externs] 117、/* warning: implicit declaration of function */ /* warning: nested extern declaration of ‘nes_route_remove_by_uuid’ */ 原因:同35。 修改方法:同35。 /opt/upgw/client/nes_cli.c: In function ‘nes_ctrl_dns_show_all_parsed’: /opt/upgw/client/nes_cli.c:241:14: warning: unused variable ‘entry_offset’ [-Wunused-variable] uint16_t entry_offset = 0; ^ /opt/upgw/client/nes_cli.c:240:14: warning: unused variable ‘entry_cnt’ [-Wunused-variable] uint16_t entry_cnt = DOMAIN_NAME_SUPPORT_MAX; ^ 118、/* warning: unused variable ‘entry_offset’ */ 原因:同2。 修改方法:同2。 /opt/upgw/client/nes_cli.c: At top level: /opt/upgw/client/nes_cli.c:296:5: warning: no previous prototype for ‘nes_ctrl_dns_show_parsed’ [-Wmissing-prototypes] int nes_ctrl_dns_show_parsed(void *parsed_result, __attribute__((unused)) struct cmdline *nes_cmdline, ^ 119、/* warning: no previous prototype for ‘nes_ctrl_dns_show_parsed’ */ 原因:同1。 修改方法:加static修饰。 /opt/upgw/client/nes_cli.c: In function ‘nes_ctrl_dns_show_parsed’: /opt/upgw/client/nes_cli.c:319:9: warning: implicit declaration of function ‘nes_domain_name_show’ [-Wimplicit-function-declaration] if (NES_SUCCESS != nes_domain_name_show(&remote_NEV, &domains, &domain_cnt, dns_rule_uuid)) { ^ /opt/upgw/client/nes_cli.c:319:9: warning: nested extern declaration of ‘nes_domain_name_show’ [-Wnested-externs] 120、/* warning: implicit declaration of function ‘nes_domain_name_show’ */ /* warning: nested extern declaration of ‘nes_domain_name_show’ */ 原因:同35。 修改方法:同35。 /opt/upgw/client/nes_cli.c:321:13: warning: ‘return’ with no value, in function returning non-void [-Wreturn-type] return; ^ 121、/* warning: ‘return’ with no value, in function returning non-void */ 原因:函数定义的返回值为int,但却按照void返回。 修改方法:返回对应类型的值。 /opt/upgw/client/nes_cli.c:302:14: warning: unused variable ‘entry_cnt’ [-Wunused-variable] uint16_t entry_cnt = DOMAIN_NAME_SUPPORT_MAX; ^ 122、/* warning: unused variable ‘entry_cnt’ */ 原因:同2。 修改方法:同2。 /opt/upgw/client/nes_cli.c: In function ‘nes_ctrl_bypass’: /opt/upgw/client/nes_cli.c:413:5: warning: implicit declaration of function ‘nes_bypass_client’ [-Wimplicit-function-declaration] if (NES_SUCCESS != nes_bypass_client(&remote_NEV, res->bypass_data_string)) ^ /opt/upgw/client/nes_cli.c:413:5: warning: nested extern declaration of ‘nes_bypass_client’ [-Wnested-externs] /opt/upgw/client/nes_cli.c: In function ‘nes_set_loglevel’: /opt/upgw/client/nes_cli.c:447:5: warning: implicit declaration of function ‘nes_loglevel_set_client’ [-Wimplicit-function-declaration] if (NES_SUCCESS != nes_loglevel_set_client(&remote_NEV, res->loglevel)) ^ /opt/upgw/client/nes_cli.c:447:5: warning: nested extern declaration of ‘nes_loglevel_set_client’ [-Wnested-externs] 123、/* implicit declaration of function ‘nes_bypass_client’ */ /* warning: nested extern declaration of ‘nes_bypass_client’ */ 原因:同35。 修改方法:同35。 /opt/upgw/client/nes_cli.c: At top level: /opt/upgw/client/nes_cli.c:544:5: warning: initialization from incompatible pointer type [enabled by default] .f = nes_ctrl_dns_show_parsed, ^ /opt/upgw/client/nes_cli.c:544:5: warning: (near initialization for ‘cmd_ctrl_domain_name_show.f’) [enabled by default] 124、/* warning: initialization from incompatible pointer type */ 原因:注册的函数(f)与实际实现函数(nes_ctrl_dns_show_parsed)的返回值不同。 修改方法:修改nes_ctrl_dns_show_parsed函数的返回值为void。 /opt/upgw/client/nes_cli.c: In function ‘nes_ctrl_route_show_parsed’: /opt/upgw/client/nes_cli.c:607:5: warning: passing argument 2 of ‘memset’ makes integer from pointer without a cast [enabled by default] memset(lookup_str, "\0", NES_MAX_LOOKUP_ENTRY_LEN + 1); ^ In file included from /usr/include/features.h:375:0, from /usr/include/stdint.h:25, from /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/stdint.h:9, from /opt/upgw/client/nes_cli.c:11: /usr/include/bits/string3.h:76:1: note: expected ‘int’ but argument is of type ‘const char *’ __NTH (memset (void *__dest, int __ch, size_t __len)) ^ 125、/* warning: passing argument 2 of ‘memset’ makes integer from pointer without a cast */ 原因:memset传递的第二个参数是字符串。 修改方法:改为0或者字符。 /opt/upgw/client/nes_cli.c:612:5: warning: implicit declaration of function ‘nes_route_show_by_uuid’ [-Wimplicit-function-declaration] if (NES_SUCCESS == nes_route_show_by_uuid(&remote_NEV, res->route_rule_uuid, ^ /opt/upgw/client/nes_cli.c:612:5: warning: nested extern declaration of ‘nes_route_show_by_uuid’ [-Wnested-externs] 126、/* warning: implicit declaration of function ‘nes_route_show_by_uuid’ */ /* warning: nested extern declaration of ‘nes_route_show_by_uuid’ */ 原因:同35。 修改方法:同35。 CC nes_client.o CC nes_cmdline_parse_string.o LD nes_client INSTALL-APP nes_client INSTALL-MAP nes_client.map ``` ### 共性问题总结 以上是所有的告警,一些问题总是在不断重复,下面是摘出的重复问题,编号与上面的对应。 ``` 1、/* warning: no previous prototype for ‘nes_bypass_client’ */ 原因:该函数未声明。 修改方法:如果告警函数只在文件内部使用,在函数前面添加static即可消除告警;如果告警函数在其它文件被调用,则需在对应的.h文件中声明。此处因为其它文件有调用,所以选择第二种方式。 70、/* ‘nes_dev_kni_alloc’ declared ‘static’ but never defined [-Wunused-function] */ /* warning: ‘REDIS_HOST’ defined but not used [-Wunused-variable] */ 原因:static修饰的函数和变量已经在.c文件中定义,不需要在.h声明,若没有static修饰,可以在.h声明,变量必须要用extern修饰。 修改方法:将这几处删除。 ``` 编程建议:对于需要其它文件使用的函数,应在头文件里面声明,其它文件引用这个头文件后方可使用;只需要在本文件中使用的函数,需要加static修饰;static修饰过的表示只在本文件使用,不能再进行声明。 ``` 2、/* warning: unused variable ‘ret’ */ 原因:变量未被使用。 修改方法:删除该变量。 89、/* warning: ‘REDIS_HOST’ defined but not used */ 原因:变量定义后未被使用。 修改方法:删除此变量。 ``` 编程建议:函数中不要出现无用变量。 ``` 14、/* warning: function declaration isn’t a prototype */ /* warning: old-style function definition */ 原因:函数未声明;函数没有参数。 修改方法:加static修饰;没有参数需加void。 59、/* warning: unused parameter ‘ingress_ring’ */ 原因:函数中定义的入参没有使用到。 修改方法:为了保证注册函数的一致性,这里不能删除入参,所以增加了对ingress_ring的判断代码: if (NULL == ingress_ring) { return ret; } ``` 编程建议:定义的函数若无参数,则需要加void关键字;若有参数则不要出现无用的参数。 ``` 4、/* warning: assignment from incompatible pointer type */ 原因:参数类型不匹配,需要的类型是struct rte_cfgfile *,而传入的nes_routefile类型是struct rte_routefile *。 修改方法:struct rte_routefile和struct rte_cfgfile中定义的变量一致,将nes_routefile改为struct rte_cfgfile *类型。 15、/* warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long long int’ */ 原因:变量类型与打印形式不匹配。 修改方法:打印方法变为%lld。 16、/* warning: comparison between signed and unsigned integer expressions */ 原因:有符号和无符号之间的比较,防止一个负的符号型数据转化为无符号型时,会产生一个不是我们想要的很大的数据。 修改方法:将i改为无符号类型。 32、/* warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘uint64_t’ */ 原因:变量类型与打印形式不匹配,uint64_t在32位系统中表示为long long int,在64位系统中表示long int。 修改方法:为了同时支持32位和64位操作系统,使用%"PRIu64"打印。 62、/* warning: passing argument 1 of ‘nes_uuid_lookup_entry_add’ from incompatible pointer type */ 原因:传参类型不正确。 修改方法:传入参数时强转为为const char *类型。 72、/* warning: assignment discards ‘const’ qualifier from pointer target type */ 原因:赋值时两端类型不一致。 修改方法:定义bypass_parameter_list时加上const。 95、/* warning: passing argument 3 of ‘nes_lookup_entry_find’ from incompatible pointer type */ 原因:定义参数和传入参数类型不一致。 修改方法:传参时强转为void ** 。 ``` 编程建议:赋值、打印和传参时,要使类型一致,若无法一致的,需要做强制类型转换,但是不建议有符号数转为无符号数,const类型转为非const类型,其它类型做强制转换时,也要看清数据范围是否满足。 ``` 13、/* warning: return discards ‘const’ qualifier from pointer target type */ 原因:函数实际的返回值与定义函数的返回值不一致。 修改方法:函数定义的返回值类型也加const修饰。 17、/* warning: control reaches end of non-void function */ 原因:函数末尾没有给出返回值。 解决方法:在末尾添加return返回相应的结果。 39、/* warning: return makes pointer from integer without a cast */ 原因:函数定义的返回值和实际返回值不是一个类型。 修改方法:返回值和定义的类型改为一致,变为int。 119、/* warning: ‘return’ with no value, in function returning non-void */ 原因:函数定义的返回值为int,但却按照void返回。 修改方法:返回对应类型的值。 ``` 编程建议:每个函数在程序结束部分都要有return标识,且需要返回与定义类型一致的返回值。 ``` 33、/* warning: missing braces around initializer */ /* warning: (near initialization for ‘tuples[0]’) */ 原因:初始化不合理。 修改方法:使用memset函数将结构体数组置0。 60、/* warning: ‘inner_ipv4_hdr’ may be used uninitialized in this function */ 原因:inner_ipv4_hdr指针未初始化。 修改方法:inner_ipv4_hdr赋予初值NULL。 114、/* warning: ‘cnt’ is used uninitialized in this function */ 原因:cnt未初始化,是一个随机值。 修改方法:cnt赋予初值0。 123、/* warning: passing argument 2 of ‘memset’ makes integer from pointer without a cast */ 原因:memset传递的第二个参数是字符串。 修改方法:改为0或者字符。 ``` 编程建议:变量在定义的同时最好能够进行初始化,使用memset初始化变量时要注意两点,一是该函数为逐字节初始化,当初始化为非0值时,非字符型变量不能用此函数初始化,二是初始化的长度要与变量长度一致。 ``` 11、/* ignoring return value of ‘fgets’, declared with attribute warn_unused_result */ 原因:未对返回值处理。 修改方法:添加对返回值的判断:if (fgets(entry, 320, route_file) != NULL) {},如果无异常再进行后续的操作。 ``` 编程建议:对于一些编译器建议判断返回值的函数,最好去判断下,防止操作指针异常,造成程序挂死。 ``` 35、/* warning: implicit declaration of function ‘domainname_check’ */ /* warning: nested extern declaration of ‘domainname_check’ */ 原因:该函数未被声明就拿来使用。 修改方法:该函数在对应头文件中声明,若声明过引用头文件。 ``` 编程建议:要使用其它文件定义的函数,此函数应是在其头文件中声明过的,使用时要引用其头文件。 ``` 100、/* warning: statement with no effect */ 原因:赋值号输错。 修改方法:改为*cnt = entry_cnt。 ``` 编程建议:赋值符和相等运算符要区分。 ``` 122、/* warning: initialization from incompatible pointer type */ 原因:注册的函数(f)与实际实现函数(nes_ctrl_dns_show_parsed)的返回值不同。 修改方法:修改nes_ctrl_dns_show_parsed函数的返回值为void。 ``` 编程建议:事先注册的函数和具体实现的函数,在参数和返回值上要完全一致。