summaryrefslogtreecommitdiff
path: root/net/udp.c
blob: c084055ec2129026b1c68c5b472d140a01bbfe50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "udp.h"
#include "inet.h"
#include "ipv4.h"
#include "ntp.h"

uint32_t udp_generic(struct netdev *dev, uint32_t ip, uint16_t src, uint16_t dst, uint8_t* pos,uint8_t *end)
{
    pos-=8; //we need 64 bytes
    struct udp_v4 *udp=pos;
    
    udp->src_port=htons(src);
    udp->dst_port=htons(dst);
    udp->len=htons(end-pos);
    udp->csum=0; // TODO: optional

    return ipv4_generic(dev,ip,IPV4_P_UDP,pos,end);
}

uint32_t udp_incoming(uint8_t* start,uint8_t *pos)
{
    struct udp_v4 *udp=pos;
    pos+=8; //header 64 bytes
    
    if(udp->src_port==htons(123)) return ntp_incoming(start, pos);
    return 0;
}