1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

getsockopt: Return correct maxpkt when using Ethernet frame types.

This commit is contained in:
Daniel Collins 2017-08-20 16:44:49 +01:00
parent 1304e84d54
commit b58ef3eb1e
2 changed files with 66 additions and 2 deletions

View File

@ -58,10 +58,10 @@ static int _max_ipx_payload(void)
{
case FRAME_TYPE_ETH_II:
case FRAME_TYPE_NOVELL:
return 1500 - (14 + sizeof(novell_ipx_packet));
return 1500 - sizeof(novell_ipx_packet);
case FRAME_TYPE_LLC:
return 1500 - (17 + sizeof(novell_ipx_packet));
return 1500 - (3 + sizeof(novell_ipx_packet));
}
abort();

View File

@ -33,6 +33,7 @@ our ($remote_mac_b, $remote_ip_b);
use constant {
IP_MAX_DATA_SIZE => 8192,
ETHER_MAX_DATA_SIZE => 1470,
LLC_MAX_DATA_SIZE => 1467,
};
my @expected_addrs;
@ -173,6 +174,7 @@ describe "IPXWrapper" => sub
{
reg_delete_key($remote_ip_a, "HKCU\\Software\\IPXWrapper");
reg_set_dword( $remote_ip_a, "HKCU\\Software\\IPXWrapper", "use_pcap", 1);
reg_set_dword( $remote_ip_a, "HKCU\\Software\\IPXWrapper", "frame_type", 1);
reg_set_addr( $remote_ip_a, "HKCU\\Software\\IPXWrapper\\$remote_mac_a", "net", "00:00:00:01");
reg_set_addr( $remote_ip_a, "HKCU\\Software\\IPXWrapper\\$remote_mac_b", "net", "00:00:00:02");
@ -196,6 +198,68 @@ describe "IPXWrapper" => sub
it_should_behave_like "getsockopt";
};
};
describe "using Novell Ethernet encapsulation" => sub
{
before all => sub
{
reg_delete_key($remote_ip_a, "HKCU\\Software\\IPXWrapper");
reg_set_dword( $remote_ip_a, "HKCU\\Software\\IPXWrapper", "use_pcap", 1);
reg_set_dword( $remote_ip_a, "HKCU\\Software\\IPXWrapper", "frame_type", 2);
reg_set_addr( $remote_ip_a, "HKCU\\Software\\IPXWrapper\\$remote_mac_a", "net", "00:00:00:01");
reg_set_addr( $remote_ip_a, "HKCU\\Software\\IPXWrapper\\$remote_mac_b", "net", "00:00:00:02");
@expected_addrs = (
{
net => "00:00:00:01",
node => $remote_mac_a,
maxpkt => ETHER_MAX_DATA_SIZE,
},
{
net => "00:00:00:02",
node => $remote_mac_b,
maxpkt => ETHER_MAX_DATA_SIZE,
},
);
};
describe "getsockopt" => sub
{
it_should_behave_like "getsockopt";
};
};
describe "using LLC (802.2) Ethernet encapsulation" => sub
{
before all => sub
{
reg_delete_key($remote_ip_a, "HKCU\\Software\\IPXWrapper");
reg_set_dword( $remote_ip_a, "HKCU\\Software\\IPXWrapper", "use_pcap", 1);
reg_set_dword( $remote_ip_a, "HKCU\\Software\\IPXWrapper", "frame_type", 3);
reg_set_addr( $remote_ip_a, "HKCU\\Software\\IPXWrapper\\$remote_mac_a", "net", "00:00:00:01");
reg_set_addr( $remote_ip_a, "HKCU\\Software\\IPXWrapper\\$remote_mac_b", "net", "00:00:00:02");
@expected_addrs = (
{
net => "00:00:00:01",
node => $remote_mac_a,
maxpkt => LLC_MAX_DATA_SIZE,
},
{
net => "00:00:00:02",
node => $remote_mac_b,
maxpkt => LLC_MAX_DATA_SIZE,
},
);
};
describe "getsockopt" => sub
{
it_should_behave_like "getsockopt";
};
};
};
sub get_first_addr_node