> Date: Mon, 18 Feb 2019 21:59:38 +0100 > From: Claudio Jeker <cje...@diehard.n-r-g.com> > > In some places bgpd just wants something bigger then a 32bit int. > Instead of using int64_t or u_int64_t use (unsigned) long long which is at > least 64bit and therefor good enough. Makes the mess with type definition > of int64_t on various systems go away (including a bunch of type casts). > While there also apply the endian.h cleanup done in bgpd a few days ago. > > OK?
You could use <stdint.h> and uint64_t instead. That should be portable. But you'd still need to be careful about printf statements since (u)int64_t might be (unsigned) long on some systems. Oh, long long doesn't work on MSVC, but you probably don't care about that. > -- > :wq Claudio > > Index: usr.sbin/bgpctl/bgpctl.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v > retrieving revision 1.229 > diff -u -p -r1.229 bgpctl.c > --- usr.sbin/bgpctl/bgpctl.c 11 Feb 2019 15:47:55 -0000 1.229 > +++ usr.sbin/bgpctl/bgpctl.c 18 Feb 2019 20:53:38 -0000 > @@ -23,6 +23,7 @@ > #include <sys/stat.h> > #include <sys/un.h> > > +#include <endian.h> > #include <err.h> > #include <errno.h> > #include <fcntl.h> > @@ -84,7 +85,6 @@ void show_attr(void *, u_int16_t, int) > void show_community(u_char *, u_int16_t); > void show_large_community(u_char *, u_int16_t); > void show_ext_community(u_char *, u_int16_t); > -char *fmt_mem(int64_t); > int show_rib_memory_msg(struct imsg *); > void send_filterset(struct imsgbuf *, struct filter_set_head *); > const char *get_errstr(u_int8_t, u_int8_t); > @@ -1761,12 +1761,12 @@ show_ext_community(u_char *data, u_int16 > case EXT_COMMUNITY_TRANS_OPAQUE: > case EXT_COMMUNITY_TRANS_EVPN: > memcpy(&ext, data + i, sizeof(ext)); > - ext = betoh64(ext) & 0xffffffffffffLL; > - printf("0x%llx", ext); > + ext = be64toh(ext) & 0xffffffffffffLL; > + printf("0x%llx", (unsigned long long)ext); > break; > case EXT_COMMUNITY_NON_TRANS_OPAQUE: > memcpy(&ext, data + i, sizeof(ext)); > - ext = betoh64(ext) & 0xffffffffffffLL; > + ext = be64toh(ext) & 0xffffffffffffLL; > switch (ext) { > case EXT_COMMUNITY_OVS_VALID: > printf("valid "); > @@ -1778,26 +1778,26 @@ show_ext_community(u_char *data, u_int16 > printf("invalid "); > break; > default: > - printf("0x%llx ", ext); > + printf("0x%llx ", (unsigned long long)ext); > break; > } > break; > default: > memcpy(&ext, data + i, sizeof(ext)); > - printf("0x%llx", betoh64(ext)); > + printf("0x%llx", (unsigned long long)be64toh(ext)); > } > if (i + 8 < len) > printf(", "); > } > } > > -char * > -fmt_mem(int64_t num) > +static char * > +fmt_mem(long long num) > { > static char buf[16]; > > if (fmt_scaled(num, buf) == -1) > - snprintf(buf, sizeof(buf), "%lldB", (long long)num); > + snprintf(buf, sizeof(buf), "%lldB", num); > > return (buf); > } > @@ -1822,31 +1822,31 @@ show_rib_memory_msg(struct imsg *imsg) > continue; > pts += stats.pt_cnt[i] * pt_sizes[i]; > printf("%10lld %s network entries using %s of memory\n", > - (long long)stats.pt_cnt[i], aid_vals[i].name, > + stats.pt_cnt[i], aid_vals[i].name, > fmt_mem(stats.pt_cnt[i] * pt_sizes[i])); > } > printf("%10lld rib entries using %s of memory\n", > - (long long)stats.rib_cnt, fmt_mem(stats.rib_cnt * > + stats.rib_cnt, fmt_mem(stats.rib_cnt * > sizeof(struct rib_entry))); > printf("%10lld prefix entries using %s of memory\n", > - (long long)stats.prefix_cnt, fmt_mem(stats.prefix_cnt * > + stats.prefix_cnt, fmt_mem(stats.prefix_cnt * > sizeof(struct prefix))); > printf("%10lld BGP path attribute entries using %s of memory\n", > - (long long)stats.path_cnt, fmt_mem(stats.path_cnt * > + stats.path_cnt, fmt_mem(stats.path_cnt * > sizeof(struct rde_aspath))); > printf("\t and holding %lld references\n", > - (long long)stats.path_refs); > + stats.path_refs); > printf("%10lld BGP AS-PATH attribute entries using " > "%s of memory\n\t and holding %lld references\n", > - (long long)stats.aspath_cnt, fmt_mem(stats.aspath_size), > - (long long)stats.aspath_refs); > + stats.aspath_cnt, fmt_mem(stats.aspath_size), > + stats.aspath_refs); > printf("%10lld BGP attributes entries using %s of memory\n", > - (long long)stats.attr_cnt, fmt_mem(stats.attr_cnt * > + stats.attr_cnt, fmt_mem(stats.attr_cnt * > sizeof(struct attr))); > printf("\t and holding %lld references\n", > - (long long)stats.attr_refs); > + stats.attr_refs); > printf("%10lld BGP attributes using %s of memory\n", > - (long long)stats.attr_dcnt, fmt_mem(stats.attr_data)); > + stats.attr_dcnt, fmt_mem(stats.attr_data)); > printf("%10lld as-set elements in %lld tables using " > "%s of memory\n", stats.aset_nmemb, stats.aset_cnt, > fmt_mem(stats.aset_size)); > Index: usr.sbin/bgpd/bgpd.h > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v > retrieving revision 1.372 > diff -u -p -r1.372 bgpd.h > --- usr.sbin/bgpd/bgpd.h 18 Feb 2019 12:35:08 -0000 1.372 > +++ usr.sbin/bgpd/bgpd.h 18 Feb 2019 20:53:38 -0000 > @@ -1064,33 +1064,33 @@ extern struct rib_names ribnames; > #define AS_NONE 0 > > struct rde_memstats { > - int64_t path_cnt; > - int64_t path_refs; > - int64_t prefix_cnt; > - int64_t rib_cnt; > - int64_t pt_cnt[AID_MAX]; > - int64_t nexthop_cnt; > - int64_t aspath_cnt; > - int64_t aspath_size; > - int64_t aspath_refs; > - int64_t attr_cnt; > - int64_t attr_refs; > - int64_t attr_data; > - int64_t attr_dcnt; > - int64_t aset_cnt; > - int64_t aset_size; > - int64_t aset_nmemb; > - int64_t pset_cnt; > - int64_t pset_size; > + long long path_cnt; > + long long path_refs; > + long long prefix_cnt; > + long long rib_cnt; > + long long pt_cnt[AID_MAX]; > + long long nexthop_cnt; > + long long aspath_cnt; > + long long aspath_size; > + long long aspath_refs; > + long long attr_cnt; > + long long attr_refs; > + long long attr_data; > + long long attr_dcnt; > + long long aset_cnt; > + long long aset_size; > + long long aset_nmemb; > + long long pset_cnt; > + long long pset_size; > }; > > struct rde_hashstats { > char name[16]; > - int64_t num; > - int64_t min; > - int64_t max; > - int64_t sum; > - int64_t sumq; > + long long num; > + long long min; > + long long max; > + long long sum; > + long long sumq; > }; > > #define MRT_FILE_LEN 512 > Index: usr.sbin/bgpd/session.h > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpd/session.h,v > retrieving revision 1.131 > diff -u -p -r1.131 session.h > --- usr.sbin/bgpd/session.h 18 Feb 2019 09:58:19 -0000 1.131 > +++ usr.sbin/bgpd/session.h 18 Feb 2019 20:53:38 -0000 > @@ -149,22 +149,22 @@ struct ctl_conn { > TAILQ_HEAD(ctl_conns, ctl_conn) ctl_conns; > > struct peer_stats { > - u_int64_t msg_rcvd_open; > - u_int64_t msg_rcvd_update; > - u_int64_t msg_rcvd_notification; > - u_int64_t msg_rcvd_keepalive; > - u_int64_t msg_rcvd_rrefresh; > - u_int64_t msg_sent_open; > - u_int64_t msg_sent_update; > - u_int64_t msg_sent_notification; > - u_int64_t msg_sent_keepalive; > - u_int64_t msg_sent_rrefresh; > - u_int64_t prefix_rcvd_update; > - u_int64_t prefix_rcvd_withdraw; > - u_int64_t prefix_rcvd_eor; > - u_int64_t prefix_sent_update; > - u_int64_t prefix_sent_withdraw; > - u_int64_t prefix_sent_eor; > + unsigned long long msg_rcvd_open; > + unsigned long long msg_rcvd_update; > + unsigned long long msg_rcvd_notification; > + unsigned long long msg_rcvd_keepalive; > + unsigned long long msg_rcvd_rrefresh; > + unsigned long long msg_sent_open; > + unsigned long long msg_sent_update; > + unsigned long long msg_sent_notification; > + unsigned long long msg_sent_keepalive; > + unsigned long long msg_sent_rrefresh; > + unsigned long long prefix_rcvd_update; > + unsigned long long prefix_rcvd_withdraw; > + unsigned long long prefix_rcvd_eor; > + unsigned long long prefix_sent_update; > + unsigned long long prefix_sent_withdraw; > + unsigned long long prefix_sent_eor; > time_t last_updown; > time_t last_read; > u_int32_t prefix_cnt; > >