On Mon, 22 Jun 2015, Ondrej Zajicek wrote:
Glad to see that at least everybody agrees on interpretation of RFC 2328
10.9 .
Are there some kind of artificial delays in the last thread (like to
maintaining max packet rate per) between such LSA Update transmissions?
There are artificial delays in general flooding, which affects LSA Updates
there, but I didn't thank there was Loading and dealing with LSReqs. I
don't see such any pacing or delays in that path in Quagga (but ICBW).
Well, i did not experience the issue, i am just BIRD developer trying to
resolve the bug in BIRD/Quagga loading reported on BIRD mailing list.
I made the attached GAWK script to try understand what's happening better.
Can be run a la:
$ tcpdump -tt -r /tmp/ospf.pcap -nv \
'(host 192.168.255.66 or host 192.168.255.72 or host 192.168.255.93)' \
| gawk -f /tmp/ospf-dump.awk | less
At the very end it should write out the history of LS-Requests by 72, and
LS-Updates by 66 and 93, for each LSA with <advertising router> # <LS ID>,
and showing the src -> dst. relative time and LSA seq num.
I don't see any obviously bogus behaviour in that history list at the end,
but it's long and I havn't finished scanning. Will keep looking - maybe
you could have a look too.
regards,
--
Paul Jakma [email protected] @pjakma Key ID: 64A2FF6A
Fortune:
When we talk of tomorrow, the gods laugh.
BEGIN {
lslist_ptypes = "LS-Update|Database|LS-Ack";
ttprev = tt1 = 0;
lscount = 0;
}
function clean(str) {
return gensub(/[[:blank:],:]/, "", "g", str);
}
function fsubstr(s,e ,str,i) {
str = "";
for (i = s; i < e; i++) {
if (str)
str = str " " $i;
else
str = $i;
}
return str;
}
/IP.*proto OSPF/ {
ttprev = tt;
tt = $1
if (!tt1)
tt1 = tt;
if (lscount)
printf (" LSA count: %5d\n", lscount);
lscount = 0;
}
/[>].*: OSPFv2,/ {
ptype = clean($5);
srcip = clean($1);
dstip = clean($3);
len=$NF;
}
$1 == "Router-ID" {
rid = clean($2);
printf("\n%-15s : %-15s len: %4d\n %17f %17f %17f\n %-15s --> %15s\n", \
rid, ptype, len, tt, tt - tt1, tt - ttprev, srcip, dstip);
}
(ptype ~ lslist_ptypes) && /Advertising Router/ {
advr = clean($3);
seq = clean($5);
age = clean($7)
lscount++;
}
(ptype ~ lslist_ptypes) && /LSA-ID/ {
#print "lsid:", $0;
lsid = clean($NF);
lstypen = clean($(NF-2));
lstype = fsubstr(1, NF-2);
printf(" %-14s %s: %15s # %15s %10s %5s\n", \
lstype, lstypen, advr, lsid, seq, age);
if ((ptype == "LS-Update" || ptype == "LS-Ack") \
&& (dstip ~ /192.168.255.72|224.0.0./)) {
str = sprintf("%s: %-15s --> %15s %17f seq %10s", \
(ptype == "LS-Update" ? "upd" : "ack"), \
srcip, dstip, tt - tt1, seq);
if ((advr,lsid) in ls_hist)
str = sprintf ("%s\n%s", ls_hist[advr,lsid], str);
ls_hist[advr,lsid] = str;
}
}
# very similar to the previous, but not quite, as the LS-Req contains
# lesser summaries than the other lslist_ptypes.
(ptype == "LS-Request") && /LSA-ID/ {
#print "lsreq:", $3, $NF, $(NF-2)
advr = clean($3)
lsid = $NF;
lstypen = clean($(NF-2));
lstype = fsubstr(4, NF-2);
printf (" %-14s %s: %15s # %15s\n", lstype, lstypen, advr, lsid);
lscount++;
if (srcip == "192.168.255.72") {
str = sprintf("req: %-15s --> %15s %17f", \
srcip, dstip, tt - tt1);
if ((advr,lsid) in ls_hist)
str = sprintf("%s\n%s", ls_hist[advr,lsid], str);
ls_hist[advr,lsid] = str;
}
}
(ptype == "Hello") && /Designated Router/ {
dr = clean($3);
bdr = clean($NF);
printf (" DR: %15s BDR: %15s\n", dr, bdr);
}
ptype == "Database" && $1 == "Options" {
opts = gensub(/.*DD Flags \[(.*)\],.*/,"\\1","f",$0);
ddseq = $NF;
printf (" DD Seq %10s Opts: %s\n", ddseq, opts);
}
END {
printf ("\n\nLSA req/update history:\n");
for (i in ls_hist) {
#if (ls_unsent[i] ~ /^req/)
split(i, sep, SUBSEP);
printf("%15s # %15s :\n",sep[1],sep[2]);
printf("%s\n\n", ls_hist[i]);
}
}
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev