The channel class pointers were strangely named , not .
struct channel *
proto_add_channel(struct proto *p, struct channel_config *cf)
{
- struct channel *c = mb_allocz(proto_pool, cf->channel->channel_size);
+ struct channel *c = mb_allocz(proto_pool, cf->class->channel_size);
c->name = cf->name;
- c->channel = cf->channel;
+ c->class = cf->class;
c->proto = p;
c->table = cf->table->table;
rt_lock_table(c->table);
init_list(&c->roa_subscriptions);
- CALL(c->channel->init, c, cf);
+ CALL(c->class->init, c, cf);
add_tail(&p->channels, &c->n);
#ifdef CONFIG_BGP
/* No automatic reload for BGP channels without in_table / out_table */
- if (c->channel == &channel_bgp)
+ if (c->class == &channel_bgp)
valid = dir ? ((c->in_keep & RIK_PREFILTER) == RIK_PREFILTER) : !!c->out_table;
#endif
if ((c->in_keep & RIK_PREFILTER) == RIK_PREFILTER)
channel_setup_in_table(c);
- CALL(c->channel->start, c);
+ CALL(c->class->start, c);
channel_start_import(c);
}
if (c->gr_lock)
channel_graceful_restart_unlock(c);
- CALL(c->channel->shutdown, c);
+ CALL(c->class->shutdown, c);
}
/* The in_table and out_table are going to be freed by freeing their resource pools. */
- CALL(c->channel->cleanup, c);
+ CALL(c->class->cleanup, c);
/* Schedule protocol shutddown */
if (proto_is_done(c->proto))
cf = cfg_allocz(cc->config_size);
cf->name = name;
- cf->channel = cc;
+ cf->class = cc;
cf->parent = proto;
cf->table = tab;
cf->out_filter = FILTER_REJECT;
struct channel_config *
channel_copy_config(struct channel_config *src, struct proto_config *proto)
{
- struct channel_config *dst = cfg_alloc(src->channel->config_size);
+ struct channel_config *dst = cfg_alloc(src->class->config_size);
- memcpy(dst, src, src->channel->config_size);
+ memcpy(dst, src, src->class->config_size);
memset(&dst->n, 0, sizeof(node));
add_tail(&proto->channels, &dst->n);
- CALL(src->channel->copy_config, dst, src);
+ CALL(src->class->copy_config, dst, src);
return dst;
}
}
/* Execute channel-specific reconfigure hook */
- if (c->channel->reconfigure && !c->channel->reconfigure(c, cf, &import_changed, &export_changed))
+ if (c->class->reconfigure && !c->class->reconfigure(c, cf, &import_changed, &export_changed))
return 0;
/* If the channel is not open, it has no routes and we cannot reload it anyways */
struct channel_config {
node n;
const char *name;
- const struct channel_class *channel;
+ const struct channel_class *class;
struct proto_config *parent; /* Where channel is defined (proto or template) */
struct rtable_config *table; /* Table we're attached to */
node n; /* Node in proto->channels */
const char *name; /* Channel name (may be NULL) */
- const struct channel_class *channel;
+ const struct channel_class *class;
struct proto *proto;
rtable *table;
struct bgp_channel *bc = (struct bgp_channel *) c;
if ( (rt_get_source_attr(r) == RTS_BGP)
- && (c->channel == &channel_bgp)
+ && (c->class == &channel_bgp)
&& (bc->base_table))
{
struct bgp_proto *p = SKIP_BACK(struct bgp_proto, p, bc->c.proto);
struct bgp_channel *c = (struct bgp_channel *) C;
/* Ignore non-BGP channels */
- if (C->channel != &channel_bgp)
+ if (C->class != &channel_bgp)
return -1;
/* Reject our routes */
struct rte_src *path;
/* Ignore non-BGP channels */
- if (C->channel != &channel_bgp)
+ if (C->class != &channel_bgp)
return;
if (new)
struct bgp_channel *c = (void *) C;
/* Ignore non-BGP channels */
- if (C->channel != &channel_bgp)
+ if (C->class != &channel_bgp)
return;
ASSERT(p->conn && p->route_refresh);
struct bgp_channel *c = (void *) C;
/* Ignore non-BGP channels */
- if (C->channel != &channel_bgp)
+ if (C->class != &channel_bgp)
return;
/* This should not happen */
struct bgp_channel *c = (void *) C;
/* Ignore non-BGP channels */
- if (C->channel != &channel_bgp)
+ if (C->class != &channel_bgp)
return;
if (c->feed_out_table)
{
channel_show_info(&c->c);
- if (c->c.channel != &channel_bgp)
+ if (c->c.class != &channel_bgp)
continue;
if (p->gr_active_num)
#define BGP_RX_BUFFER_EXT_SIZE 65535
#define BGP_TX_BUFFER_EXT_SIZE 65535
-#define BGP_CF_WALK_CHANNELS(P,C) WALK_LIST(C, P->c.channels) if (C->c.channel == &channel_bgp)
-#define BGP_WALK_CHANNELS(P,C) WALK_LIST(C, P->p.channels) if (C->c.channel == &channel_bgp)
+#define BGP_CF_WALK_CHANNELS(P,C) WALK_LIST(C, P->c.channels) if (C->c.class == &channel_bgp)
+#define BGP_WALK_CHANNELS(P,C) WALK_LIST(C, P->p.channels) if (C->c.class == &channel_bgp)
static inline int bgp_channel_is_ipv4(struct bgp_channel *c)
{ return BGP_AFI(c->afi) == BGP_AFI_IPV4; }
struct channel_config pri_cf = {
.name = "pri",
- .channel = cc->channel,
+ .class = cc->class,
.table = cc->table,
.out_filter = cc->out_filter,
.out_subprefix = cc->out_subprefix,
struct channel_config sec_cf = {
.name = "sec",
- .channel = cc->channel,
+ .class = cc->class,
.table = cf->peer,
.out_filter = cc->in_filter,
.out_subprefix = cf->in_subprefix,