diff options
author | Ian Moffett <ian@osmora.org> | 2025-09-25 00:09:14 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-09-25 00:09:14 -0400 |
commit | a32ba9a351f7fa4de0d30e55cf122552bce2c015 (patch) | |
tree | 03c99c674c3b08708cc6fccfdf37cdcbd46e98bc /src/main.c | |
parent | 37b4f62ba40b4107283bc149ffa2aa322c4f4654 (diff) |
link: Add ONET link interface
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 38 |
1 files changed, 9 insertions, 29 deletions
@@ -39,6 +39,7 @@ #include <string.h> #include "if_ether.h" #include "dgram.h" +#include "link.h" #define TEST_STR "Hello from o.1p!! Meow meow!" @@ -62,10 +63,8 @@ data_send(void) struct sockaddr_ll saddr; struct ether_hdr *eth; struct onet_dgram *dgram; - struct ifreq ifr; - uint32_t ifidx; - mac_addr_t mac; - int error, sockfd; + struct onet_link link; + int error; eth = (struct ether_hdr *)data; p = DGRAM_DATA(data); @@ -74,45 +73,26 @@ data_send(void) memset(data, 0, sizeof(data)); memcpy(p, TEST_STR, sizeof(TEST_STR)); - sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW); - if (sockfd < 0) { - printf("error: failed to create socket (error=%d)\n", sockfd); - return sockfd; - } - - /* Set the interface that we want to use */ - strlcpy(ifr.ifr_name, iface, IFNAMSIZ); - error = ioctl(sockfd, SIOGIFINDEX, &ifr); - if (error < 0) { - printf("ioctl[SIOGIFINDEX]: bad iface \"%s\"\n", iface); - return error; - } - - ifidx = ifr.ifr_ifindex; - - /* Grab the hardware address */ - error = ioctl(sockfd, SIOCGIFHWADDR, &ifr); + /* Open a link */ + error = onet_open(iface, &link); if (error < 0) { - printf("ioctl[SIOGIFHWADDR]: could not read hwaddr \"%s\"\n", iface); return error; } - mac = mac_swap((void *)ifr.ifr_hwaddr.sa_data); - /* * Set up link layer sockaddr, load up the frame, datagram * and send it off. */ - saddr.sll_ifindex = ifidx; + saddr.sll_ifindex = link.iface_idx; saddr.sll_halen = ETH_ALEN; - ether_load_route(mac, 0xFFFFFFFFFFFF, eth); + ether_load_route(link.hwaddr, 0xFFFFFFFFFFFF, eth); dgram_load(sizeof(TEST_STR), 50, dgram); sendto( - sockfd, &data, sizeof(data), 0, + link.sockfd, &data, sizeof(data), 0, (struct sockaddr *)&saddr, sizeof(struct sockaddr_ll) ); - close(sockfd); + onet_close(&link); return 0; } |