mirror of
https://github.com/JannisHeydemann/BoredOS.git
synced 2026-05-30 02:16:58 +00:00
src/kernel --> src/
This commit is contained in:
77
src/net/nic/nic_netif.c
Normal file
77
src/net/nic/nic_netif.c
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/pbuf.h"
|
||||
#include "lwip/stats.h"
|
||||
#include "lwip/snmp.h"
|
||||
#include "lwip/ethip6.h"
|
||||
#include "lwip/etharp.h"
|
||||
#include "netif/etharp.h"
|
||||
#include "nic.h"
|
||||
#include "network.h"
|
||||
#include "kutils.h"
|
||||
|
||||
#define IFNAME0 'e'
|
||||
#define IFNAME1 'n'
|
||||
|
||||
static err_t nic_low_level_output(struct netif *netif, struct pbuf *p) {
|
||||
(void)netif;
|
||||
|
||||
if (p->next == NULL) {
|
||||
if (nic_send_packet(p->payload, p->len) != 0) {
|
||||
return ERR_IF;
|
||||
}
|
||||
} else {
|
||||
u8_t buffer[2048];
|
||||
u16_t copied = pbuf_copy_partial(p, buffer, 2048, 0);
|
||||
if (nic_send_packet(buffer, copied) != 0) {
|
||||
return ERR_IF;
|
||||
}
|
||||
}
|
||||
|
||||
LINK_STATS_INC(link.xmit);
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
static void nic_low_level_input(struct netif *netif) {
|
||||
u8_t buffer[2048];
|
||||
int len;
|
||||
|
||||
while ((len = nic_receive_packet(buffer, sizeof(buffer))) > 0) {
|
||||
|
||||
struct pbuf *p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
|
||||
if (p != NULL) {
|
||||
pbuf_take(p, buffer, len);
|
||||
if (netif->input(p, netif) != ERR_OK) {
|
||||
pbuf_free(p);
|
||||
} else {
|
||||
LINK_STATS_INC(link.recv);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
err_t nic_netif_init(struct netif *netif) {
|
||||
netif->name[0] = IFNAME0;
|
||||
netif->name[1] = IFNAME1;
|
||||
netif->output = etharp_output;
|
||||
netif->linkoutput = nic_low_level_output;
|
||||
|
||||
nic_driver_t* dev = nic_get_driver();
|
||||
if (!dev) return ERR_IF;
|
||||
|
||||
netif->hwaddr_len = 6;
|
||||
nic_get_mac_address(netif->hwaddr);
|
||||
|
||||
netif->mtu = 1500;
|
||||
netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP;
|
||||
|
||||
// Explicitly set link to up to trigger lwIP state changes
|
||||
netif_set_link_up(netif);
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void nic_netif_poll(struct netif *netif) {
|
||||
nic_low_level_input(netif);
|
||||
}
|
||||
Reference in New Issue
Block a user