Indirect trust value is calculated based on trust value reported by common neighbours of corresponding node.
//Finding common neighbor for current path
int common_count=0;
int common_neighbor[100];
for (int p=0;p<neighbor_count[index];p++) {
for (int q=0;q<neighbor_count[path->nexthop];q++) {
//printf("n1=%d n2=%d\n",neighbor_id[index][p],neighbor_id[rt->rt_nexthop][q]);
if(neighbor_id[index][p]==neighbor_id[path->nexthop][q]) {
common_neighbor[common_count]=neighbor_id[index][p];
//printf("neighborid=%d\n",common_neighbor[common_count]);
if(malicious_status[neighbor_id[index][p]]==1) {
printf("Attacker %d is common neighbor \n",neighbor_id[index][p]);
}
common_count=common_count+1;
}
}
}
printf("Current_Path path->nexthop=%d \t common_count %d\n",path->nexthop,common_count);
float a[common_count];
float g_trust=0.0;
float avg_trust;
float add_trust;
for (int r=0;r<common_count;r++) { a[r]=DT[common_neighbor[r]][path->nexthop];
printf("DT=%.2f for nexthop %d at node %d\n",a[r],path->nexthop,common_neighbor[r]);
g_trust = g_trust + a[r];
}
avg_trust = g_trust / common_count;
avg_trust is the average trust value of indirect neighbors.