📄 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 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 + -