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