📄 rfc1329.txt
字号:
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 beginKuehn [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) begincase 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.deKuehn [Page 28]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -