mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 10:42:45 +00:00 
			
		
		
		
	Kernel: Make sure we increment the TX counter
This was broken by b436dd1.
			
			
This commit is contained in:
		
							parent
							
								
									c66b281856
								
							
						
					
					
						commit
						60298121d8
					
				
					 6 changed files with 15 additions and 9 deletions
				
			
		|  | @ -230,7 +230,7 @@ KResultOr<size_t> IPv4Socket::sendto(FileDescription&, const UserOrKernelBuffer& | ||||||
|             routing_decision.adapter->release_packet_buffer(*packet); |             routing_decision.adapter->release_packet_buffer(*packet); | ||||||
|             return EFAULT; |             return EFAULT; | ||||||
|         } |         } | ||||||
|         routing_decision.adapter->send_raw({ packet->buffer.data(), packet->buffer.size() }); |         routing_decision.adapter->send_packet({ packet->buffer.data(), packet->buffer.size() }); | ||||||
|         routing_decision.adapter->release_packet_buffer(*packet); |         routing_decision.adapter->release_packet_buffer(*packet); | ||||||
|         return data_length; |         return data_length; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -61,6 +61,12 @@ NetworkAdapter::~NetworkAdapter() | ||||||
|     all_adapters().resource().remove(this); |     all_adapters().resource().remove(this); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void NetworkAdapter::send_packet(ReadonlyBytes packet) | ||||||
|  | { | ||||||
|  |     m_packets_out++; | ||||||
|  |     send_raw(packet); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void NetworkAdapter::send(const MACAddress& destination, const ARPPacket& packet) | void NetworkAdapter::send(const MACAddress& destination, const ARPPacket& packet) | ||||||
| { | { | ||||||
|     size_t size_in_bytes = sizeof(EthernetFrameHeader) + sizeof(ARPPacket); |     size_t size_in_bytes = sizeof(EthernetFrameHeader) + sizeof(ARPPacket); | ||||||
|  | @ -69,10 +75,9 @@ void NetworkAdapter::send(const MACAddress& destination, const ARPPacket& packet | ||||||
|     eth->set_source(mac_address()); |     eth->set_source(mac_address()); | ||||||
|     eth->set_destination(destination); |     eth->set_destination(destination); | ||||||
|     eth->set_ether_type(EtherType::ARP); |     eth->set_ether_type(EtherType::ARP); | ||||||
|     m_packets_out++; |  | ||||||
|     m_bytes_out += size_in_bytes; |     m_bytes_out += size_in_bytes; | ||||||
|     memcpy(eth->payload(), &packet, sizeof(ARPPacket)); |     memcpy(eth->payload(), &packet, sizeof(ARPPacket)); | ||||||
|     send_raw({ (const u8*)eth, size_in_bytes }); |     send_packet({ (const u8*)eth, size_in_bytes }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void NetworkAdapter::fill_in_ipv4_header(PacketWithTimestamp& packet, IPv4Address const& source_ipv4, MACAddress const& destination_mac, IPv4Address const& destination_ipv4, IPv4Protocol protocol, size_t payload_size, u8 ttl) | void NetworkAdapter::fill_in_ipv4_header(PacketWithTimestamp& packet, IPv4Address const& source_ipv4, MACAddress const& destination_mac, IPv4Address const& destination_ipv4, IPv4Protocol protocol, size_t payload_size, u8 ttl) | ||||||
|  |  | ||||||
|  | @ -89,15 +89,16 @@ public: | ||||||
|     constexpr size_t layer3_payload_offset() const { return sizeof(EthernetFrameHeader); } |     constexpr size_t layer3_payload_offset() const { return sizeof(EthernetFrameHeader); } | ||||||
|     constexpr size_t ipv4_payload_offset() const { return layer3_payload_offset() + sizeof(IPv4Packet); } |     constexpr size_t ipv4_payload_offset() const { return layer3_payload_offset() + sizeof(IPv4Packet); } | ||||||
| 
 | 
 | ||||||
|     virtual void send_raw(ReadonlyBytes) = 0; |  | ||||||
| 
 |  | ||||||
|     Function<void()> on_receive; |     Function<void()> on_receive; | ||||||
| 
 | 
 | ||||||
|  |     void send_packet(ReadonlyBytes); | ||||||
|  | 
 | ||||||
| protected: | protected: | ||||||
|     NetworkAdapter(); |     NetworkAdapter(); | ||||||
|     void set_interface_name(const PCI::Address&); |     void set_interface_name(const PCI::Address&); | ||||||
|     void set_mac_address(const MACAddress& mac_address) { m_mac_address = mac_address; } |     void set_mac_address(const MACAddress& mac_address) { m_mac_address = mac_address; } | ||||||
|     void did_receive(ReadonlyBytes); |     void did_receive(ReadonlyBytes); | ||||||
|  |     virtual void send_raw(ReadonlyBytes) = 0; | ||||||
| 
 | 
 | ||||||
|     void set_loopback_name(); |     void set_loopback_name(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -263,7 +263,7 @@ void handle_icmp(const EthernetFrameHeader& eth, const IPv4Packet& ipv4_packet, | ||||||
|             memcpy(response.payload(), request.payload(), icmp_payload_size); |             memcpy(response.payload(), request.payload(), icmp_payload_size); | ||||||
|         response.header.set_checksum(internet_checksum(&response, icmp_packet_size)); |         response.header.set_checksum(internet_checksum(&response, icmp_packet_size)); | ||||||
|         // FIXME: What is the right TTL value here? Is 64 ok? Should we use the same TTL as the echo request?
 |         // FIXME: What is the right TTL value here? Is 64 ok? Should we use the same TTL as the echo request?
 | ||||||
|         adapter->send_raw({ packet->buffer.data(), packet->buffer.size() }); |         adapter->send_packet({ packet->buffer.data(), packet->buffer.size() }); | ||||||
|         adapter->release_packet_buffer(*packet); |         adapter->release_packet_buffer(*packet); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -240,7 +240,7 @@ KResult TCPSocket::send_tcp_packet(u16 flags, const UserOrKernelBuffer* payload, | ||||||
| 
 | 
 | ||||||
|     tcp_packet.set_checksum(compute_tcp_checksum(local_address(), peer_address(), tcp_packet, payload_size)); |     tcp_packet.set_checksum(compute_tcp_checksum(local_address(), peer_address(), tcp_packet, payload_size)); | ||||||
| 
 | 
 | ||||||
|     routing_decision.adapter->send_raw({ packet->buffer.data(), packet->buffer.size() }); |     routing_decision.adapter->send_packet({ packet->buffer.data(), packet->buffer.size() }); | ||||||
| 
 | 
 | ||||||
|     m_packets_out++; |     m_packets_out++; | ||||||
|     m_bytes_out += buffer_size; |     m_bytes_out += buffer_size; | ||||||
|  | @ -572,7 +572,7 @@ void TCPSocket::retransmit_packets() | ||||||
|         routing_decision.adapter->fill_in_ipv4_header(*packet.buffer, |         routing_decision.adapter->fill_in_ipv4_header(*packet.buffer, | ||||||
|             local_address(), routing_decision.next_hop, peer_address(), |             local_address(), routing_decision.next_hop, peer_address(), | ||||||
|             IPv4Protocol::TCP, packet.buffer->buffer.size() - ipv4_payload_offset, ttl()); |             IPv4Protocol::TCP, packet.buffer->buffer.size() - ipv4_payload_offset, ttl()); | ||||||
|         routing_decision.adapter->send_raw({ packet.buffer->buffer.data(), packet.buffer->buffer.size() }); |         routing_decision.adapter->send_packet({ packet.buffer->buffer.data(), packet.buffer->buffer.size() }); | ||||||
|         m_packets_out++; |         m_packets_out++; | ||||||
|         m_bytes_out += packet.buffer->buffer.size(); |         m_bytes_out += packet.buffer->buffer.size(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -94,7 +94,7 @@ KResultOr<size_t> UDPSocket::protocol_send(const UserOrKernelBuffer& data, size_ | ||||||
| 
 | 
 | ||||||
|     routing_decision.adapter->fill_in_ipv4_header(*packet, local_address(), routing_decision.next_hop, |     routing_decision.adapter->fill_in_ipv4_header(*packet, local_address(), routing_decision.next_hop, | ||||||
|         peer_address(), IPv4Protocol::UDP, udp_buffer_size, ttl()); |         peer_address(), IPv4Protocol::UDP, udp_buffer_size, ttl()); | ||||||
|     routing_decision.adapter->send_raw({ packet->buffer.data(), packet->buffer.size() }); |     routing_decision.adapter->send_packet({ packet->buffer.data(), packet->buffer.size() }); | ||||||
|     return data_length; |     return data_length; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gunnar Beutner
						Gunnar Beutner