forked from Mirror/frr
lib: increase vrf_id from 16 bit to 32 bit identifier
This is a preparatory work for configuring vrf/frr over netns vrf structure is being changed to 32 bit, and the VRF will have the possibility to have a backend made up of NETNS. Let's put some history. Initially the 32 bit was because one wanted to map on vrf_id both the VRFLITE and the NSID. Initially, one would have liked to make zebra configure at the same time both vrf lite and vrf from netns in a flat way. From the show running perspective, one would have had both kind of vrfs, thatone would configure on the same way. however, it leads to inconsistencies in concepts, because it mixes vrf vrf with vrf, and vrf is not always mapped with netns. For instance, logical-router could also be used with netns. In that case, it would not be possible to map vrf with netns. There was an other reason why 32 bit is proposed. this is because some systems handle NSID to 32 bits. As vrf lite exists only on Linux, there are other systems that would like to use an other vrf backend than vrf lite. The netns backend for vrf will be used for that too. for instance, for windows or freebsd, some similar netns concept exists; so it will be easier to reuse netns backend for vrf, than reusing vrflite backend for vrf. This commit is here to extend vrf_id to 32 bits. Following commits in a second step will help in enable a VRF backend. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
parent
4ff9eb721d
commit
a9ff90c41b
|
@ -94,7 +94,7 @@ struct vrf *vrf_get(vrf_id_t vrf_id, const char *name)
|
|||
int new = 0;
|
||||
|
||||
if (debug_vrf)
|
||||
zlog_debug("VRF_GET: %s(%d)", name, vrf_id);
|
||||
zlog_debug("VRF_GET: %s(%u)", name, vrf_id);
|
||||
|
||||
/* Nothing to see, move along here */
|
||||
if (!name && vrf_id == VRF_UNKNOWN)
|
||||
|
@ -268,7 +268,7 @@ void *vrf_info_lookup(vrf_id_t vrf_id)
|
|||
*/
|
||||
|
||||
#define VRF_BITMAP_NUM_OF_GROUPS 8
|
||||
#define VRF_BITMAP_NUM_OF_BITS_IN_GROUP (UINT16_MAX / VRF_BITMAP_NUM_OF_GROUPS)
|
||||
#define VRF_BITMAP_NUM_OF_BITS_IN_GROUP (UINT32_MAX / VRF_BITMAP_NUM_OF_GROUPS)
|
||||
#define VRF_BITMAP_NUM_OF_BYTES_IN_GROUP \
|
||||
(VRF_BITMAP_NUM_OF_BITS_IN_GROUP / CHAR_BIT + 1) /* +1 for ensure */
|
||||
|
||||
|
@ -355,7 +355,7 @@ static void vrf_autocomplete(vector comps, struct cmd_token *token)
|
|||
struct vrf *vrf = NULL;
|
||||
|
||||
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
|
||||
if (vrf->vrf_id != 0)
|
||||
if (vrf->vrf_id != VRF_DEFAULT)
|
||||
vector_set(comps, XSTRDUP(MTYPE_COMPLETION, vrf->name));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,8 +32,7 @@
|
|||
|
||||
/* The default VRF ID */
|
||||
#define VRF_DEFAULT 0
|
||||
#define VRF_UNKNOWN UINT16_MAX
|
||||
#define VRF_ALL UINT16_MAX - 1
|
||||
#define VRF_UNKNOWN UINT32_MAX
|
||||
|
||||
/* Pending: May need to refine this. */
|
||||
#ifndef IFLA_VRF_MAX
|
||||
|
|
|
@ -291,7 +291,7 @@ void zclient_create_header(struct stream *s, uint16_t command, vrf_id_t vrf_id)
|
|||
stream_putw(s, ZEBRA_HEADER_SIZE);
|
||||
stream_putc(s, ZEBRA_HEADER_MARKER);
|
||||
stream_putc(s, ZSERV_VERSION);
|
||||
stream_putw(s, vrf_id);
|
||||
stream_putl(s, vrf_id);
|
||||
stream_putw(s, command);
|
||||
}
|
||||
|
||||
|
@ -306,7 +306,7 @@ int zclient_read_header(struct stream *s, int sock, u_int16_t *size,
|
|||
*size -= ZEBRA_HEADER_SIZE;
|
||||
STREAM_GETC(s, *marker);
|
||||
STREAM_GETC(s, *version);
|
||||
STREAM_GETW(s, *vrf_id);
|
||||
STREAM_GETL(s, *vrf_id);
|
||||
STREAM_GETW(s, *cmd);
|
||||
|
||||
if (*version != ZSERV_VERSION || *marker != ZEBRA_HEADER_MARKER) {
|
||||
|
@ -1677,7 +1677,7 @@ struct interface *zebra_interface_vrf_update_read(struct stream *s,
|
|||
{
|
||||
unsigned int ifindex;
|
||||
struct interface *ifp;
|
||||
vrf_id_t new_id = VRF_DEFAULT;
|
||||
vrf_id_t new_id;
|
||||
|
||||
/* Get interface index. */
|
||||
ifindex = stream_getl(s);
|
||||
|
@ -2043,7 +2043,7 @@ static int zclient_read(struct thread *thread)
|
|||
length = stream_getw(zclient->ibuf);
|
||||
marker = stream_getc(zclient->ibuf);
|
||||
version = stream_getc(zclient->ibuf);
|
||||
vrf_id = stream_getw(zclient->ibuf);
|
||||
vrf_id = stream_getl(zclient->ibuf);
|
||||
command = stream_getw(zclient->ibuf);
|
||||
|
||||
if (marker != ZEBRA_HEADER_MARKER || version != ZSERV_VERSION) {
|
||||
|
@ -2346,9 +2346,9 @@ void zclient_interface_set_master(struct zclient *client,
|
|||
|
||||
zclient_create_header(s, ZEBRA_INTERFACE_SET_MASTER, master->vrf_id);
|
||||
|
||||
stream_putw(s, master->vrf_id);
|
||||
stream_putl(s, master->vrf_id);
|
||||
stream_putl(s, master->ifindex);
|
||||
stream_putw(s, slave->vrf_id);
|
||||
stream_putl(s, slave->vrf_id);
|
||||
stream_putl(s, slave->ifindex);
|
||||
|
||||
stream_putw_at(s, 0, stream_get_endp(s));
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#define ZEBRA_MAX_PACKET_SIZ 4096
|
||||
|
||||
/* Zebra header size. */
|
||||
#define ZEBRA_HEADER_SIZE 8
|
||||
#define ZEBRA_HEADER_SIZE 10
|
||||
|
||||
/* special socket path name to use TCP
|
||||
* @ is used as first character because that's abstract socket names on Linux
|
||||
|
@ -227,7 +227,7 @@ struct zserv_header {
|
|||
* always set to 255 in new zserv.
|
||||
*/
|
||||
uint8_t version;
|
||||
#define ZSERV_VERSION 4
|
||||
#define ZSERV_VERSION 5
|
||||
vrf_id_t vrf_id;
|
||||
uint16_t command;
|
||||
};
|
||||
|
|
|
@ -486,7 +486,7 @@ typedef u_int16_t zebra_size_t;
|
|||
typedef u_int16_t zebra_command_t;
|
||||
|
||||
/* VRF ID type. */
|
||||
typedef u_int16_t vrf_id_t;
|
||||
typedef uint32_t vrf_id_t;
|
||||
|
||||
typedef uint32_t route_tag_t;
|
||||
#define ROUTE_TAG_MAX UINT32_MAX
|
||||
|
|
|
@ -432,7 +432,7 @@ static void if_bfd_session_update(struct interface *ifp, struct prefix *dp,
|
|||
} else {
|
||||
zlog_debug(
|
||||
"MESSAGE: ZEBRA_INTERFACE_BFD_DEST_UPDATE %s/%d "
|
||||
"with src %s/%d and vrf %d %s event",
|
||||
"with src %s/%d and vrf %u %s event",
|
||||
inet_ntop(dp->family, &dp->u.prefix, buf[0],
|
||||
INET6_ADDRSTRLEN),
|
||||
dp->prefixlen,
|
||||
|
|
|
@ -155,7 +155,7 @@ void zserv_create_header(struct stream *s, uint16_t cmd, vrf_id_t vrf_id)
|
|||
stream_putw(s, ZEBRA_HEADER_SIZE);
|
||||
stream_putc(s, ZEBRA_HEADER_MARKER);
|
||||
stream_putc(s, ZSERV_VERSION);
|
||||
stream_putw(s, vrf_id);
|
||||
stream_putl(s, vrf_id);
|
||||
stream_putw(s, cmd);
|
||||
}
|
||||
|
||||
|
@ -508,7 +508,7 @@ int zsend_interface_vrf_update(struct zserv *client, struct interface *ifp,
|
|||
|
||||
/* Fill in the ifIndex of the interface and its new VRF (id) */
|
||||
stream_putl(s, ifp->ifindex);
|
||||
stream_putw(s, vrf_id);
|
||||
stream_putl(s, vrf_id);
|
||||
|
||||
/* Write packet size. */
|
||||
stream_putw_at(s, 0, stream_get_endp(s));
|
||||
|
@ -2472,11 +2472,11 @@ static int zread_interface_set_master(struct zserv *client,
|
|||
int ifindex;
|
||||
vrf_id_t vrf_id;
|
||||
|
||||
STREAM_GETW(s, vrf_id);
|
||||
STREAM_GETL(s, vrf_id);
|
||||
STREAM_GETL(s, ifindex);
|
||||
master = if_lookup_by_index(ifindex, vrf_id);
|
||||
|
||||
STREAM_GETW(s, vrf_id);
|
||||
STREAM_GETL(s, vrf_id);
|
||||
STREAM_GETL(s, ifindex);
|
||||
slave = if_lookup_by_index(ifindex, vrf_id);
|
||||
|
||||
|
@ -2714,7 +2714,7 @@ static int zebra_client_read(struct thread *thread)
|
|||
STREAM_GETW(client->ibuf, length);
|
||||
STREAM_GETC(client->ibuf, marker);
|
||||
STREAM_GETC(client->ibuf, version);
|
||||
STREAM_GETW(client->ibuf, vrf_id);
|
||||
STREAM_GETL(client->ibuf, vrf_id);
|
||||
STREAM_GETW(client->ibuf, command);
|
||||
|
||||
if (marker != ZEBRA_HEADER_MARKER || version != ZSERV_VERSION) {
|
||||
|
|
Loading…
Reference in a new issue