⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1329.txt

📁 RFC 的详细文档!
💻 TXT
📖 第 1 页 / 共 4 页
字号:
RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


 PDU := assemble_dmarp_pdu(dmarp_pdu);
 output SNAP2_LSSAP.UNITDATA_request(My_S_MAC_addr,Broadcast_HW_addr,
  dmarp_QoS,PDU);
end;


when SNAP1_ARPSAP.UNITDATA_indication(Source_addr,Dest_addr,QoS,PDU)
begin
 output LS_ARPSAP.UNITDATA_indication(Source_addr,Dest_addr,QoS,PDU);
end;

when SNAP2_ARPSAP.UNITDATA_indication(Source_addr,Dest_addr,QoS,PDU)
begin end;

when SNAP1_LSSAP.UNITDATA_indication(Source_addr,Dest_addr,QoS,PDU)
begin
 dmarp_pdu := extract_dmarp_pdu(PDU);
 if ((dmarp_pdu.operation = error) or (dmarp_pdu.operation = reply))
 then begin
  if my_pr_address(dmarp_pdu.prtype,dmarp_pdu.PR_receiver) then begin
   if not H_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then begin
    if not OR_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then begin
     if LS_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then begin
      output LS_System_Access_point.TIMER_cancel(
       "Hold_Timer",get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
      create_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2,
       reset,set,reset,reset,reset,set);
     end;
     output LS_System_Access_point.TIMER_request(
      OR_set_timeout,"OR_Entry_Timer",
      get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
     send_pdu.hwtype    := ethernet;
     send_pdu.prtype    := dmarp_pdu.prtype;
     send_pdu.HW_length := fddi_addr_length;
     send_pdu.PR_length := dmarp_pdu.PR_length;
     send_pdu.operation := search;
     send_pdu.HW_1      := My_P_MAC_addr;
     send_pdu.HW_2      := dmarp_pdu.HW_1;
     send_pdu.PR_sender := get_my_pr_addr(dmarp_pdu.prtype);
     send_pdu.PR_receiver := get_broadcast_addr(dmarp_pdu.prtype);
     PDU := assemble_dmarp_pdu(dmarp_pdu);
     output SNAP2_LSSAP.UNITDATA_request(
      My_S_MAC_addr,Broadcast_HW_addr,dmarp_QoS,PDU);
    end else begin
     if dmarp_pdu.operation=error then
     update_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2);
    end;
   end else begin



Kuehn                                                          [Page 22]

RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


    if dmarp_pdu.operation = error then
    update_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2);
   end;
  end else begin
   if my_pr_address(dmarp_pdu.prtype,dmarp_pdu.PR_sender) and
    (dmarp_pdu.operation = reply) then begin
    dmarp_pdu.operation := error;
    PDU := assemble_dmarp_pdu(dmarp_pdu);
    output SNAP1_LSSAP.UNITDATA_request(
     My_P_MAC_addr,Broadcast_HW_addr,dmarp_QoS,PDU);
   end else begin
    if dmarp_pdu.operation=error and
     search_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1) then
    update_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2);
end; end; end; end;


when SNAP2_LSSAP.UNITDATA_indication(Source_addr,Dest_addr,QoS,PDU)
begin
 dmarp_pdu := extract_dmarp_pdu(PDU);
 if (dmarp_pdu.operation = found) and
  my_pr_address(dmarp_pdu.prtype,dmarp_pdu.PR_receiver) then begin
  if not H_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then begin
   if OR_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then begin
    output LS_System_Access_Point.
     TIMER_cancel("OR_Entry_Timer",
     get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
   end;
   if LS_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then begin
    output LS_System_Access_Point.
     TIMER_cancel("Hold_Timer",
     get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
   end;
   create_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2,
    set,reset,set,reset,reset,set);
   output LS_System_Access_Point.TIMER_request(Query_time,"Query_Timer",
    get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
  end;
 end else begin
  if (dmarp_pdu.operation = reply) or
   (dmarp_pdu.operation = request) then begin
   if search_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1) then
    update_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2);
  end;
  if (dmarp_pdu.operation=request) and
   my_pr_address(dmarp_pdu.prtype,dmarp_pdu.PR_receiver) then begin
   send_pdu.hwtype      := dmarp_pdu.hwtype;
   send_pdu.prtype      := dmarp_pdu.prtype;



Kuehn                                                          [Page 23]

RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


   send_pdu.HW_length   := fddi_addr_length;
   send_pdu.PR_length   := dmarp_pdu.PR_length;
   send_pdu.operation   := reply;
   send_pdu.HW_1        := My_P_MAC_addr;
   send_pdu.HW_2        := My_S_MAC_addr;
   send_pdu.PR_sender   := get_my_pr_addr(dmarp_pdu.prtype);
   send_pdu.PR_receiver := dmarp_pdu.PR_sender;
   PDU := assemble_dmarp_pdu(dmarp_pdu);
   output SNAP2_LSSAP.UNITDATA_request(
    My_S_MAC_addr,Broadcast_HW_addr,dmarp_QoS,PDU);
  end else begin
   if my_pr_address(dmarp_pdu.prtype,dmarp_pdu.pr_receiver) then begin
    case dmarp_pdu.operation of
     reply: begin
      if not ( OR_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) or
       LS_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) )then begin
       create_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2,
        set,reset,reset,reset,reset,set);
       output LS_System_Access_Point.TIMER_request(Hold_time,
        "Hold_Timer",get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
      end;
     end;

     error: begin
      if not ( OR_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) or
       H_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) ) then begin
       if LS_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then
       output LS_System_access_point.TIMER_cancel(
        "Hold_Timer",get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
       create_entry(dmarp_pdu.prtype,dmarp_pdu.HW_1,dmarp_pdu.HW_2,
        reset,set,reset,reset,reset,set);
       output LS_System_access_point.TIMER_request(
        OR_set_timeout,"OR_Entry_Timer",
        get_subscript(dmarp_pdu.prtype,dmarp_pdu.HW_1));
       send_pdu.hwtype          := ethernet;
       send_pdu.prtype          := dmarp_pdu.prtype;
       send_pdu.HW_length       := fddi_addr_length;
       send_pdu.PR_length       := dmarp_pdu.PR_length;
       send_pdu.operation       := search;
       send_pdu.HW_1            := My_P_MAC_addr;
       send_pdu.HW_2            := dmarp_pdu.HW_1;
       send_pdu.PR_sender       := get_my_pr_addr(dmarp_pdu.prtype);
       send_pdu.PR_receiver     := get_broadcast_addr(dmarp_pdu.prtype);
       PDU := assemble_dmarp_pdu(dmarp_pdu);
       output SNAP2_LSSAP.UNITDATA_request(
        My_S_MAC_addr,Broadcast_HW_addr,dmarp_QoS,PDU);
      end;
     end;



Kuehn                                                          [Page 24]

RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


     search: begin
      if not (dmarp_pdu.HW_1=My_P_MAC_addr or
       dmarp_pdu.HW_2=My_P_MAC_addr) then begin
       if H_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) and
        H_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_2) then begin
        send_pdu.hwtype      := ethernet;
        send_pdu.prtype      := dmarp_pdu.prtype;
        send_pdu.HW_length   := fddi_addr_length;
        send_pdu.PR_length   := dmarp_pdu.PR_length;
        send_pdu.operation   := found;
        send_pdu.HW_1        := dmarp_pdu.HW_2;
        send_pdu.HW_2        := get_S_MAC_addr(dmarp_pdu.prtype,
                                 dmarp_pdu.HW_2);
        send_pdu.PR_sender   := get_my_pr_addr(dmarp_pdu.prtype);
        send_pdu.PR_receiver := get_broadcast_addr(dmarp_pdu.prtype);
        PDU := assemble_dmarp_pdu(send_pdu);
        output SNAP2_LSSAP.UNITDATA_request(My_S_MAC_addr,
         get_S_MAC_addr(dmarp_pdu.prtype,dmarp_pdu.HW_1),dmarp_QoS,PDU);
        send_pdu.HW_1 := dmarp_pdu.HW_1;
        send_pdu.HW_2 := get_S_MAC_addr(dmarp_pdu.prtype,
         dmarp_pdu.HW_1);
        PDU := assemble_dmarp_pdu(send_pdu);
        output SNAP2_LSSAP.UNITDATA_request(My_S_MAC_addr,
         get_S_MAC_addr(dmarp_pdu.prtype,dmarp_pdu.HW_2),dmarp_QoS,PDU);
       end;
      end;
     end;


     Query: begin
      if dmarp_pdu.HW_2 = My_P_MAC_addr then begin
       send_pdu.hwtype          := ethernet;
       send_pdu.prtype          := dmarp_pdu.prtype;
       send_pdu.HW_length       := dmarp_pdu.HW_length;
       send_pdu.PR_length       := dmarp_pdu.PR_length;
       send_pdu.operation       := hold;
       send_pdu.HW_1            := My_P_MAC_addr;
       send_pdu.HW_2            := My_S_MAC_addr;
       send_pdu.PR_sender       := get_my_pr_addr(dmarp_pdu.prtype);
       send_pdu.PR_receiver     := dmarp_pdu.PR_sender;
       PDU := assemble_dmarp_pdu(send_pdu);
       output SNAP2_LSSAP.UNITDATA_request(
        My_S_MAC_addr,dmarp_pdu.HW_1,dmarp_QoS,PDU);
      end;
     end;
     Hold: begin
      if H_bit_set(dmarp_pdu.prtype,dmarp_pdu.HW_1) then
      reset_Q_bit(dmarp_pdu.prtype,dmarp_pdu.HW_1);



Kuehn                                                          [Page 25]

RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


     end;
    end;
   end;
  end;
 end;
end;


when LS_System_Access_Point.TIMER_response(Timer_name,subscript) begin
case Timer_name of
 "OR_Entry_Timer": begin
  act_P_MAC_addr := get_P_MAC_addr(subscript);
  if OR_bit_set(get_pr_type(subscript),act_P_MAC_addr) then begin
   send_pdu.hwtype      := ethernet;
   send_pdu.prtype      := get_pr_type(subscript);
   send_pdu.HW_length   := fddi_addr_length;
   send_pdu.PR_length   := get_pr_length(send_pdu.prtype);
   send_pdu.operation   := request;
   send_pdu.HW_1        := My_P_MAC_addr;
   send_pdu.HW_2        := My_S_MAC_addr;
   send_pdu.PR_sender   := get_my_pr_addr(send_pdu.prtype);
   send_pdu.PR_receiver := get_broadcast_addr(send_pdu.prtype);
   PDU := assemble_dmarp_pdu(send_pdu);
   output SNAP2_LSSAP.UNITDATA_request(
    My_S_MAC_addr,get_S_MAC_addr(send_pdu.prtype,act_P_MAC_addr),
    dmarp_QoS,PDU);
   delete_entry(subscript);
  end;
 end;
 "Hold_Timer": begin
  act_P_MAC_addr := get_P_MAC_addr(subscript);
  if (not H_bit_set(get_pr_type(subscript),act_P_MAC_addr)) and
   LS_bit_set(get_pr_type(subscript),act_P_MAC_addr) then begin
   set_H_bit(get_pr_type(subscript),act_P_MAC_addr);
   output LS_System_Access_point.TIMER_request(
    Query_time,"Query_Timer",subscript);
  end;
 end;
 "Query_Timer": begin
  act_P_MAC_addr       := get_P_MAC_addr(subscript);
  send_pdu.hwtype      := ethernet;
  send_pdu.prtype      := get_pr_type(subscript);
  send_pdu.HW_length   := fddi_addr_length;
  send_pdu.PR_length   := get_pr_length(send_pdu.prtype);
  send_pdu.PR_sender   := get_my_pr_addr(send_pdu.prtype);
  send_pdu.PR_receiver := get_broadcast_addr(send_pdu.prtype);
  if Q_bit_set(get_pr_type(subscript),act_P_MAC_addr) then begin
   send_pdu.HW_1      := My_P_MAC_addr;



Kuehn                                                          [Page 26]

RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


   send_pdu.HW_2      := My_S_MAC_addr;
   send_pdu.operation := request;
   PDU := assemble_dmarp_pdu(send_pdu);
   output SNAP2_LSSAP.UNITDATA_request(
    My_S_MAC_addr,get_S_MAC_addr(send_pdu.prtype,act_P_MAC_addr),
    dmarp_QoS,PDU);
   delete_entry(subscript);
  end else begin
   send_pdu.HW_1      := My_S_MAC_addr;
   send_pdu.HW_2      := get_P_MAC_addr(subscript);
   send_pdu.operation := query;
   PDU := assemble_dmarp_pdu(send_pdu);
   output SNAP2_LSSAP.UNITDATA_request(
    My_S_MAC_addr,get_S_MAC_addr(send_pdu.prtype,send_pdu.HW_2),
    dmarp_QoS,PDU);
   set_Q_bit(send_pdu.prtype,send_pdu.HW_2);
end; end; end; end; end; (* body *)

11. Summary

   The introduction of the load sharing layer in the protocol layering
   of the dual MAC stations allows the application of IP and ARP on
   inhomogeneous FDDI rings. The protocol suite of single MAC stations
   needs no modification.

   By the load sharing layer, the property "dual MAC" is transparent for
   ARP, IP and the higher layer protocols.

   In dual MAC stations, any load sharing criteria may be implemented in
   the multiplexer of the load sharing entity.  The conversion of
   addresses, the exchange of address and reachability information
   between dual MAC stations and the proper transmission of multicast
   and broadcast frames is taken upon by the load sharing entity.

12. References

    [1] ANSI, "FDDI Station Management (SMT)", ANSI
        X3T9/90-X3T9.5/84-49 Rev 6.2, May 1990.

    [2] ANSI, "FDDI Media Access Control (MAC-2)",
        X3T9/90-X3T9.5/88-139 Rev 3.2, June 1990.

    [3] ISO, "Information processing systems- Local area networks-
        Part 2: Logical link control", ISO 8802-2:1989, August 1989.

    [4] IEEE, "Draft Standard P802.1A Overview and Architecture",
        P802.1A/D9-89/74, September 1989.




Kuehn                                                          [Page 27]

RFC 1329     Address Resolution for Dual MAC FDDI Networks      May 1992


    [5] Plummer, C., "An Ethernet Address Resolution Protocol --or--
        Converting Network Protocol Addresses to 48.bit Ethernet
        Address for Transmission on Ethernet Hardware", RFC 826, MIT,
        November 1982.

    [6] Reynolds, J., and Postel, J., "Assigned Numbers", RFC 1060,
        USC/Information Sciences Institute, March 1990.

    [7] Postel, J., "Internet Protocol", RFC 791, USC/Information
        Sciences Institute, September 1981.

    [8] Katz, D., "A Proposed Standard for the Transmission of IP
        Datagrams over FDDI Networks", RFC 1188, Merit/NSFNET,
        October 1990.

    [9] Internet Engineering Task Force, Braden, R., Editor,
        "Requirements for Internet Hosts -- Communication Layers",
        RFC 1122, IETF, October 1989.

   [10] Katz, D., "The Use of Connectionless Network Layer Protocols
        over FDDI Networks", Merit/NSFNET, 1990.

13.  Security Considerations

   Security issues are not discussed in this memo.

14. Author's Address

   Peter Kuehn
   Raiffeisenstrasse 9b
   8933 Untermeitingen
   Germany

   Phone: .. 82 32 / 7 46 02
   EMail: thimmela@sniabg.wa.sni.de
















Kuehn                                                          [Page 28]


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -