Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| projectsroutingproposal:api [2016/01/16 15:14] – AlexanderChernikov | projectsroutingproposal:api [2016/01/17 08:25] (current) – AlexanderChernikov | ||
|---|---|---|---|
| Line 26: | Line 26: | ||
| < | < | ||
| - | int lle4_lookup(ifnet *ifp, mbuf *m, struct in_addr dst, u_char *desten, uint32_t *pflags) | + | int in_resolve_lla(ifnet *ifp, mbuf *m, struct in_addr dst, u_char *desten, uint32_t *pflags) |
| - | int lle6_lookup(ifnet *ifp, mbuf *m, struct in6_addr *dst, u_char *desten, uint32_t *pflags) | + | int in6_resolve_lla(ifnet *ifp, mbuf *m, struct in6_addr *dst, u_char *desten, uint32_t *pflags) |
| </ | </ | ||
| - | More details in DXXXX. | + | More details in [[https:// |
| ===== Routing ===== | ===== Routing ===== | ||
| Line 58: | Line 58: | ||
| * Use compact on-stack structures | * Use compact on-stack structures | ||
| * Provide different functions for different tasks varying in terms of provided information and speed | * Provide different functions for different tasks varying in terms of provided information and speed | ||
| + | * Have per-AF functions and use addresses instead of sockaddr | ||
| * Be multipath-ready from day 1. | * Be multipath-ready from day 1. | ||
| * Hide all of the internals avoiding passing rtentries to any data/ | * Hide all of the internals avoiding passing rtentries to any data/ | ||
| Line 70: | Line 71: | ||
| Source: [[https:// | Source: [[https:// | ||
| + | |||
| Actual functions description: | Actual functions description: | ||
| == fibX_lookup_nh_basic() == | == fibX_lookup_nh_basic() == | ||
| Line 175: | Line 177: | ||
| == fibX_lookup_prepend() == | == fibX_lookup_prepend() == | ||
| - | Actual functions used for forwarding | + | Actual functions used for forwarding. Passing //struct route// permits function to automatically program //ro_len//, // |
| < | < | ||
| + | /* | ||
| + | * Performs lookup in IPv4 table fib @fibnum. | ||
| + | * Assumes @ro-> | ||
| + | * In case of successful lookup ro-> | ||
| + | * appropriate interface info and full L2 header to prepend or | ||
| + | * nhop address. If route does not contain gateway, or gateway is unreachable, | ||
| + | * NHF_L2_INCOMPLETE flag and gateway address is stored into nh-> | ||
| + | * If @hh is not NULL, additional nexthop data is stored there. | ||
| + | * | ||
| + | * Returns 0 on success. | ||
| + | */ | ||
| + | int fib4_lookup_prepend(uint32_t fibnum, struct in_addr dst, uint32_t flags, uint32_t flowid, struct route *ro, struct nhop4_helper *hh); | ||
| + | /* Non-recursive nexthop */ | ||
| + | struct nhop_prepend { | ||
| + | uint16_t | ||
| + | uint8_t | ||
| + | uint8_t | ||
| + | uint16_t | ||
| + | struct ifnet *nh_lifp; | ||
| + | struct ifnet *nh_aifp; | ||
| + | union { | ||
| + | char nh_data[MAX_PREPEND_LEN]; | ||
| + | struct in_addr | ||
| + | struct in6_addr nh6_addr;/* IPv4 gw address */ | ||
| + | }; | ||
| + | }; | ||
| + | void fib4_free_prepend(struct nhop_prepend *pnh); | ||
| </ | </ | ||