Passion/Network

OSPF Router-LSA 의 링크 구분

sunshout 2007. 9. 21. 18:56

Router LSA 의 링크 구분 (Language : c)
  1.       rl = (struct router_lsa *) w;
  2.  
  3.       length = ntohs (w->length);
  4.  
  5.       for (i = 0;
  6.            i < ntohs (rl->links) && length >= sizeof (struct router_lsa);
  7.            i++, length -= 12)
  8.         {
  9.           switch (rl->link[i].type)
  10.             {
  11.             case LSA_LINK_TYPE_POINTOPOINT:
  12.             case LSA_LINK_TYPE_VIRTUALLINK:
  13.               /* Router LSA ID. */
  14.               if (v->type == OSPF_ROUTER_LSA &&
  15.                   IPV4_ADDR_SAME (&rl->link[i].link_id, &v->id))
  16.                 {
  17.                   return i;
  18.                 }
  19.               break;
  20.             case LSA_LINK_TYPE_TRANSIT:
  21.               /* Network LSA ID. */
  22.               if (v->type == OSPF_NETWORK_LSA &&
  23.                   IPV4_ADDR_SAME (&rl->link[i].link_id, &v->id))
  24.                 {
  25.                   return i;
  26.                 }
  27.               break;
  28.             case LSA_LINK_TYPE_STUB:
  29.               /* Stub can't lead anywhere, carry on */
  30.               continue;
  31.             default:
  32.               break;
  33.             }
  34.         }