1*1b46b959SChen Xised 's/|/ /g' | awk ' 2*1b46b959SChen Xi 3*1b46b959SChen Xifunc get_state(code){ 4*1b46b959SChen Xi 5*1b46b959SChen Xi ret = "Unknown State" 6*1b46b959SChen Xi switch(code){ 7*1b46b959SChen Xi case 0: 8*1b46b959SChen Xi ret = "INVALID" 9*1b46b959SChen Xi break; 10*1b46b959SChen Xi case 1: 11*1b46b959SChen Xi ret = "BRANCH" 12*1b46b959SChen Xi break; 13*1b46b959SChen Xi case 2: 14*1b46b959SChen Xi ret = "TRUNK" 15*1b46b959SChen Xi break; 16*1b46b959SChen Xi case 3: 17*1b46b959SChen Xi ret = "TIP" 18*1b46b959SChen Xi break; 19*1b46b959SChen Xi } 20*1b46b959SChen Xi return ret 21*1b46b959SChen Xi} 22*1b46b959SChen Xi 23*1b46b959SChen Xifunc get_self_dir(code){ 24*1b46b959SChen Xi prefetch = 0 25*1b46b959SChen Xi num_clients = 1 26*1b46b959SChen Xi 27*1b46b959SChen Xi str = "clients: [" 28*1b46b959SChen Xi for(i = 0; i < num_clients; i++){ 29*1b46b959SChen Xi client_state = and( rshift(code, i * 2 + prefetch), 0x03) 30*1b46b959SChen Xi str = sprintf("%s %s", str, get_state(client_state)) 31*1b46b959SChen Xi } 32*1b46b959SChen Xi str = sprintf("%s ]", str) 33*1b46b959SChen Xi 34*1b46b959SChen Xi self_state_code = and( rshift(code, num_clients * 2 + prefetch), 0x03) 35*1b46b959SChen Xi self_dirty = and( rshift(code, 2 + num_clients * 2 + prefetch), 1) 36*1b46b959SChen Xi 37*1b46b959SChen Xi str = sprintf("%s self: [%s] dirty: %d", str, get_state(self_state_code), self_dirty) 38*1b46b959SChen Xi 39*1b46b959SChen Xi return str 40*1b46b959SChen Xi} 41*1b46b959SChen Xi 42*1b46b959SChen Xifunc get_client_dir(dir){ 43*1b46b959SChen Xi return dir 44*1b46b959SChen Xi} 45*1b46b959SChen Xi 46*1b46b959SChen Xifunc get_dir(typeId, dir){ 47*1b46b959SChen Xi if(typeId > 1){ 48*1b46b959SChen Xi return get_client_dir(dir) 49*1b46b959SChen Xi } else { 50*1b46b959SChen Xi return get_self_dir(dir) 51*1b46b959SChen Xi } 52*1b46b959SChen Xi} 53*1b46b959SChen Xi 54*1b46b959SChen Xifunc get_type(tpe){ 55*1b46b959SChen Xi ret = "Unknown Type" 56*1b46b959SChen Xi switch(tpe){ 57*1b46b959SChen Xi case 0: 58*1b46b959SChen Xi ret = "self_dir" 59*1b46b959SChen Xi break; 60*1b46b959SChen Xi case 1: 61*1b46b959SChen Xi ret = "self_tag" 62*1b46b959SChen Xi break; 63*1b46b959SChen Xi case 2: 64*1b46b959SChen Xi ret = "client_dir" 65*1b46b959SChen Xi break; 66*1b46b959SChen Xi case 3: 67*1b46b959SChen Xi ret = "client_tag" 68*1b46b959SChen Xi break; 69*1b46b959SChen Xi } 70*1b46b959SChen Xi return ret 71*1b46b959SChen Xi} 72*1b46b959SChen Xi 73*1b46b959SChen Xi{ 74*1b46b959SChen Xi $1 = $NF; # timestamp 75*1b46b959SChen Xi $NF = ""; # remove log id 76*1b46b959SChen Xi if ($7 == 0 || $7 == 2) { 77*1b46b959SChen Xi $3 = "" 78*1b46b959SChen Xi $5 = sprintf("dir: %s", get_dir($7, $5)) 79*1b46b959SChen Xi } else { 80*1b46b959SChen Xi $3 = sprintf("tag: %lx", $3) 81*1b46b959SChen Xi $5 = "" 82*1b46b959SChen Xi } 83*1b46b959SChen Xi $4 = sprintf("set: %lx", $4) 84*1b46b959SChen Xi $6 = sprintf("way: %d", $6) 85*1b46b959SChen Xi $7 = get_type($7) # type id 86*1b46b959SChen Xi} 87*1b46b959SChen Xi 88*1b46b959SChen Xi1 # print every line 89*1b46b959SChen Xi' 90