mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-29 22:43:10 +00:00
103 lines
2.2 KiB
C
103 lines
2.2 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||
|
/*
|
||
|
* Copyright (C) 2013 Allied Telesis Labs NZ
|
||
|
* Chris Packham, <judge.packham@gmail.com>
|
||
|
*
|
||
|
* Copyright (C) 2022 YADRO
|
||
|
* Viacheslav Mitrofanov <v.v.mitrofanov@yadro.com>
|
||
|
*/
|
||
|
|
||
|
#ifndef __NDISC_H__
|
||
|
#define __NDISC_H__
|
||
|
|
||
|
#include <ndisc.h>
|
||
|
|
||
|
/* struct nd_msg - ICMPv6 Neighbour Discovery message format */
|
||
|
struct nd_msg {
|
||
|
struct icmp6hdr icmph;
|
||
|
struct in6_addr target;
|
||
|
__u8 opt[0];
|
||
|
};
|
||
|
|
||
|
/* struct echo_msg - ICMPv6 echo request/reply message format */
|
||
|
struct echo_msg {
|
||
|
struct icmp6hdr icmph;
|
||
|
__u16 id;
|
||
|
__u16 sequence;
|
||
|
};
|
||
|
|
||
|
/* Neigbour Discovery option types */
|
||
|
enum {
|
||
|
__ND_OPT_PREFIX_INFO_END = 0,
|
||
|
ND_OPT_SOURCE_LL_ADDR = 1,
|
||
|
ND_OPT_TARGET_LL_ADDR = 2,
|
||
|
ND_OPT_PREFIX_INFO = 3,
|
||
|
ND_OPT_REDIRECT_HDR = 4,
|
||
|
ND_OPT_MTU = 5,
|
||
|
__ND_OPT_MAX
|
||
|
};
|
||
|
|
||
|
/* IPv6 destination address of packet waiting for ND */
|
||
|
extern struct in6_addr net_nd_sol_packet_ip6;
|
||
|
/* MAC destination address of packet waiting for ND */
|
||
|
extern uchar *net_nd_packet_mac;
|
||
|
/* pointer to packet waiting to be transmitted after ND is resolved */
|
||
|
extern uchar *net_nd_tx_packet;
|
||
|
/* size of packet waiting to be transmitted */
|
||
|
extern int net_nd_tx_packet_size;
|
||
|
/* the timer for ND resolution */
|
||
|
extern ulong net_nd_timer_start;
|
||
|
/* the number of requests we have sent so far */
|
||
|
extern int net_nd_try;
|
||
|
|
||
|
#ifdef CONFIG_IPV6
|
||
|
/**
|
||
|
* ndisc_init() - Make initial steps for ND state machine.
|
||
|
* Usually move variables into initial state.
|
||
|
*/
|
||
|
void ndisc_init(void);
|
||
|
|
||
|
/**
|
||
|
* ndisc_receive() - Handle ND packet
|
||
|
*
|
||
|
* @et: pointer to incoming packet
|
||
|
* @ip6: pointer to IPv6 header
|
||
|
* @len: incoming packet length
|
||
|
* Return: 0 if handle successfully, -1 if unsupported/unknown ND packet type
|
||
|
*/
|
||
|
int ndisc_receive(struct ethernet_hdr *et, struct ip6_hdr *ip6, int len);
|
||
|
|
||
|
/**
|
||
|
* ndisc_request() - Send ND request
|
||
|
*/
|
||
|
void ndisc_request(void);
|
||
|
|
||
|
/**
|
||
|
* ndisc_init() - Check ND response timeout
|
||
|
*
|
||
|
* Return: 0 if no timeout, -1 otherwise
|
||
|
*/
|
||
|
int ndisc_timeout_check(void);
|
||
|
#else
|
||
|
static inline void ndisc_init(void)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static inline int
|
||
|
ndisc_receive(struct ethernet_hdr *et, struct ip6_hdr *ip6, int len)
|
||
|
{
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
static inline void ndisc_request(void)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static inline int ndisc_timeout_check(void)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __NDISC_H__ */
|