The following commit has been merged in the master branch:
commit caf55bc20a4221cee8bdb1ae28b0878df3c932c4
Author: Linus Lüssing <linus.luessing(a)ascom.ch>
Date: Sun Nov 28 16:17:14 2010 +0100
batctl: Fix bisecting of OGMs with 32bit seqno
This patch increases the size of the seqno variable for bisect and now
uses UINT32_MAX for format checking. To be consistent, also "255"s got
substituted by UINT8_MAX
Signed-off-by: Linus Lüssing <linus.luessing(a)ascom.ch>
diff --git a/bisect.c b/bisect.c
index b7d8969..bdb51a8 100644
--- a/bisect.c
+++ b/bisect.c
@@ -385,7 +385,7 @@ err:
return 0;
}
-static int seqno_event_new(char *iface_addr, char *orig, char *prev_sender, char *neigh, int seqno, int tq, int ttl)
+static int seqno_event_new(char *iface_addr, char *orig, char *prev_sender, char *neigh, long long seqno, int tq, int ttl)
{
struct bat_node *orig_node, *neigh_node, *prev_sender_node;
struct orig_event *orig_event;
@@ -406,17 +406,17 @@ static int seqno_event_new(char *iface_addr, char *orig, char *prev_sender, char
goto err;
}
- if ((seqno < 0) || (seqno > 65535)) {
- fprintf(stderr, "Invalid sequence number found (%i) - skipping", seqno);
+ if ((seqno < 0) || (seqno > UINT32_MAX)) {
+ fprintf(stderr, "Invalid sequence number found (%lli) - skipping", seqno);
goto err;
}
- if ((tq < 0) || (tq > 255)) {
+ if ((tq < 0) || (tq > UINT8_MAX)) {
fprintf(stderr, "Invalid tq value found (%i) - skipping", tq);
goto err;
}
- if ((ttl < 0) || (ttl > 255)) {
+ if ((ttl < 0) || (ttl > UINT8_MAX)) {
fprintf(stderr, "Invalid ttl value found (%i) - skipping", ttl);
goto err;
}
@@ -468,7 +468,8 @@ static int parse_log_file(char *file_path)
FILE *fd;
char line_buff[MAX_LINE], *start_ptr, *start_ptr_safe, *tok_ptr;
char *neigh, *iface_addr, *orig, *prev_sender, rt_flag;
- int line_count = 0, tq, ttl, seqno, i, res, max;
+ int line_count = 0, tq, ttl, i, res, max;
+ long long seqno;
fd = fopen(file_path, "r");
@@ -510,7 +511,7 @@ static int parse_log_file(char *file_path)
prev_sender[strlen(prev_sender) - 1] = 0;
break;
case 16:
- seqno = strtol(tok_ptr, NULL, 10);
+ seqno = strtoll(tok_ptr, NULL, 10);
break;
case 18:
tq = strtol(tok_ptr, NULL, 10);
@@ -602,7 +603,7 @@ static int parse_log_file(char *file_path)
return 1;
}
-static struct rt_hist *get_rt_hist_by_seqno(struct orig_event *orig_event, int seqno)
+static struct rt_hist *get_rt_hist_by_seqno(struct orig_event *orig_event, long long seqno)
{
struct seqno_event *seqno_event;
struct rt_hist *rt_hist = NULL;
@@ -618,7 +619,7 @@ static struct rt_hist *get_rt_hist_by_seqno(struct orig_event *orig_event, int s
return rt_hist;
}
-static struct rt_hist *get_rt_hist_by_node_seqno(struct bat_node *bat_node, struct bat_node *orig_node, int seqno)
+static struct rt_hist *get_rt_hist_by_node_seqno(struct bat_node *bat_node, struct bat_node *orig_node, long long seqno)
{
struct orig_event *orig_event;
struct rt_hist *rt_hist;
@@ -632,7 +633,7 @@ static struct rt_hist *get_rt_hist_by_node_seqno(struct bat_node *bat_node, stru
}
static int print_rt_path_at_seqno(struct bat_node *src_node, struct bat_node *dst_node,
- struct bat_node *next_hop, int seqno, int seqno_rand, int read_opt)
+ struct bat_node *next_hop, long long seqno, long long seqno_rand, int read_opt)
{
struct bat_node *next_hop_tmp;
struct orig_event *orig_event;
@@ -640,10 +641,10 @@ static int print_rt_path_at_seqno(struct bat_node *src_node, struct bat_node *ds
char curr_loop_magic[LOOP_MAGIC_LEN];
memset(curr_loop_magic, 0, LOOP_MAGIC_LEN);
- snprintf(curr_loop_magic, LOOP_MAGIC_LEN, "%s%s%i%i", src_node->name,
+ snprintf(curr_loop_magic, LOOP_MAGIC_LEN, "%s%s%lli%lli", src_node->name,
dst_node->name, seqno, seqno_rand);
- printf("Path towards %s (seqno %i ",
+ printf("Path towards %s (seqno %lli ",
get_name_by_macstr(dst_node->name, read_opt), seqno);
printf("via neigh %s):", get_name_by_macstr(next_hop->name, read_opt));
@@ -694,13 +695,14 @@ out:
}
static int find_rt_table_change(struct bat_node *src_node, struct bat_node *dst_node,
- struct bat_node *curr_node, int seqno_min, int seqno_max,
- int seqno_rand, int read_opt)
+ struct bat_node *curr_node, long long seqno_min, long long seqno_max,
+ long long seqno_rand, int read_opt)
{
struct orig_event *orig_event;
struct rt_hist *rt_hist, *rt_hist_tmp;
char curr_loop_magic[LOOP_MAGIC_LEN], loop_check = 0;
- int res, seqno_tmp, seqno_min_tmp = seqno_min;
+ int res;
+ long long seqno_tmp, seqno_min_tmp = seqno_min;
/* printf("%i: curr_node: %s ", bla,
get_name_by_macstr(curr_node->name, read_opt));
@@ -719,7 +721,7 @@ static int find_rt_table_change(struct bat_node *src_node, struct bat_node *dst_
}
memset(curr_loop_magic, 0, LOOP_MAGIC_LEN);
- snprintf(curr_loop_magic, LOOP_MAGIC_LEN, "%s%s%i%i",
+ snprintf(curr_loop_magic, LOOP_MAGIC_LEN, "%s%s%lli%lli",
src_node->name, dst_node->name,
seqno_min_tmp, seqno_rand);
@@ -819,13 +821,14 @@ loop:
return -2;
}
-static void loop_detection(char *loop_orig, int seqno_min, int seqno_max, char *filter_orig, int read_opt)
+static void loop_detection(char *loop_orig, long long seqno_min, long long seqno_max, char *filter_orig, int read_opt)
{
struct bat_node *bat_node;
struct orig_event *orig_event;
struct hash_it_t *hashit = NULL;
struct rt_hist *rt_hist, *prev_rt_hist;
- int last_seqno = -1, seqno_count = 0, res;
+ long long last_seqno = -1, seqno_count = 0;
+ int res;
char check_orig[NAME_LEN];
printf("\nAnalyzing routing tables ");
@@ -839,9 +842,9 @@ static void loop_detection(char *loop_orig, int seqno_min, int seqno_max, char *
if ((seqno_min == -1) && (seqno_max == -1))
printf("[all sequence numbers]");
else if (seqno_min == seqno_max)
- printf("[sequence number: %i]", seqno_min);
+ printf("[sequence number: %lli]", seqno_min);
else
- printf("[sequence number range: %i-%i]", seqno_min, seqno_max);
+ printf("[sequence number range: %lli-%lli]", seqno_min, seqno_max);
if (!compare_name(filter_orig, check_orig))
printf(" [filter originator: %s]",
@@ -915,7 +918,7 @@ static void loop_detection(char *loop_orig, int seqno_min, int seqno_max, char *
(rt_hist->seqno_event->seqno != prev_rt_hist->seqno_event->seqno)) {
if (rt_hist->seqno_event->seqno < prev_rt_hist->seqno_event->seqno) {
fprintf(stderr,
- "Smaller seqno (%i) than previously received seqno (%i) of orig %s triggered routing table change - skipping recursive check\n",
+ "Smaller seqno (%lli) than previously received seqno (%lli) of orig %s triggered routing table change - skipping recursive check\n",
rt_hist->seqno_event->seqno, prev_rt_hist->seqno_event->seqno,
get_name_by_macstr(rt_hist->seqno_event->orig->name, read_opt));
goto validate_path;
@@ -984,7 +987,7 @@ static void seqno_trace_print_neigh(struct seqno_trace_neigh *seqno_trace_neigh,
}
static void seqno_trace_print(struct list_head_first *trace_list, char *trace_orig,
- int seqno_min, int seqno_max, char *filter_orig, int read_opt)
+ long long seqno_min, long long seqno_max, char *filter_orig, int read_opt)
{
struct seqno_trace *seqno_trace;
char head[MAX_LINE], check_orig[NAME_LEN];
@@ -999,9 +1002,9 @@ static void seqno_trace_print(struct list_head_first *trace_list, char *trace_or
if ((seqno_min == -1) && (seqno_max == -1))
printf("[all sequence numbers]");
else if (seqno_min == seqno_max)
- printf("[sequence number: %i]", seqno_min);
+ printf("[sequence number: %lli]", seqno_min);
else
- printf("[sequence number range: %i-%i]", seqno_min, seqno_max);
+ printf("[sequence number range: %lli-%lli]", seqno_min, seqno_max);
if (!compare_name(filter_orig, check_orig))
printf(" [filter originator: %s]",
@@ -1013,7 +1016,7 @@ static void seqno_trace_print(struct list_head_first *trace_list, char *trace_or
if (!seqno_trace->print)
continue;
- printf("+=> %s (seqno %i)\n",
+ printf("+=> %s (seqno %lli)\n",
get_name_by_macstr(trace_orig, read_opt),
seqno_trace->seqno);
@@ -1251,7 +1254,7 @@ err:
return 0;
}
-static void trace_seqnos(char *trace_orig, int seqno_min, int seqno_max, char *filter_orig, int read_opt)
+static void trace_seqnos(char *trace_orig, long long seqno_min, long long seqno_max, char *filter_orig, int read_opt)
{
struct bat_node *bat_node;
struct orig_event *orig_event;
@@ -1315,7 +1318,7 @@ out:
return;
}
-static void print_rt_tables(char *rt_orig, int seqno_min, int seqno_max, char *filter_orig, int read_opt)
+static void print_rt_tables(char *rt_orig, long long seqno_min, long long seqno_max, char *filter_orig, int read_opt)
{
struct bat_node *bat_node;
struct rt_table *rt_table;
@@ -1332,9 +1335,9 @@ static void print_rt_tables(char *rt_orig, int seqno_min, int seqno_max, char *f
if ((seqno_min == -1) && (seqno_max == -1))
printf("[all sequence numbers]");
else if (seqno_min == seqno_max)
- printf("[sequence number: %i]", seqno_min);
+ printf("[sequence number: %lli]", seqno_min);
else
- printf("[sequence number range: %i-%i]", seqno_min, seqno_max);
+ printf("[sequence number range: %lli-%lli]", seqno_min, seqno_max);
if (!compare_name(filter_orig, check_orig))
printf(" [filter originator: %s]",
@@ -1364,7 +1367,7 @@ static void print_rt_tables(char *rt_orig, int seqno_min, int seqno_max, char *f
continue;
if (seqno_event->seqno > -1) {
- printf("rt change triggered by OGM from: %s (tq: %i, ttl: %i, seqno %i",
+ printf("rt change triggered by OGM from: %s (tq: %i, ttl: %i, seqno %lli",
get_name_by_macstr(seqno_event->orig->name, read_opt),
seqno_event->tq, seqno_event->ttl, seqno_event->seqno);
printf(", neigh: %s",
@@ -1443,7 +1446,7 @@ int bisect(int argc, char **argv)
{
int ret = EXIT_FAILURE, res, optchar, found_args = 1;
int read_opt = USE_BAT_HOSTS, num_parsed_files;
- int tmp_seqno, seqno_max = -1, seqno_min = -1;
+ long long tmp_seqno, seqno_max = -1, seqno_min = -1;
char *trace_orig_ptr = NULL, *rt_orig_ptr = NULL, *loop_orig_ptr = NULL;
char orig[NAME_LEN], filter_orig[NAME_LEN], *dash_ptr, *filter_orig_ptr = NULL;
@@ -1477,17 +1480,17 @@ int bisect(int argc, char **argv)
*dash_ptr = 0;
tmp_seqno = strtol(optarg, NULL , 10);
- if ((tmp_seqno >= 0) && (tmp_seqno <= 65535))
+ if ((tmp_seqno >= 0) && (tmp_seqno <= UINT32_MAX))
seqno_min = tmp_seqno;
else
- fprintf(stderr, "Warning - given sequence number is out of range: %i\n", tmp_seqno);
+ fprintf(stderr, "Warning - given sequence number is out of range: %lli\n", tmp_seqno);
if (dash_ptr) {
tmp_seqno = strtol(dash_ptr + 1, NULL , 10);
- if ((tmp_seqno >= 0) && (tmp_seqno <= 65535))
+ if ((tmp_seqno >= 0) && (tmp_seqno <= UINT32_MAX))
seqno_max = tmp_seqno;
else
- fprintf(stderr, "Warning - given sequence number is out of range: %i\n", tmp_seqno);
+ fprintf(stderr, "Warning - given sequence number is out of range: %lli\n", tmp_seqno);
*dash_ptr = '-';
}
@@ -1551,7 +1554,7 @@ int bisect(int argc, char **argv)
seqno_max = seqno_min;
if (seqno_min > seqno_max) {
- printf("Error - the sequence range minimum (%i) should be smaller than the maximum (%i)\n",
+ printf("Error - the sequence range minimum (%lli) should be smaller than the maximum (%lli)\n",
seqno_min, seqno_max);
goto err;
}
diff --git a/bisect.h b/bisect.h
index 70673e8..56cb861 100644
--- a/bisect.h
+++ b/bisect.h
@@ -76,7 +76,7 @@ struct seqno_event {
struct bat_node *orig;
struct bat_node *neigh;
struct bat_node *prev_sender;
- int seqno;
+ long long seqno;
int tq;
int ttl;
struct rt_hist *rt_hist;
@@ -91,7 +91,7 @@ struct seqno_trace_neigh {
struct seqno_trace {
struct list_head list;
- int seqno;
+ long long seqno;
char print;
struct seqno_trace_neigh seqno_trace_neigh;
};
--
batctl