if (strcmp(bp->iface, iface)) { del_kernel_ax25_route(bp->iface, &bp->call); action |= NEW_ROUTE; strcpy(bp->iface, iface); }  if (ndigi != bp->ndigi || memcmp(bp->digipeater, digi, bp->ndigi*AXLEN)) {
if (strcmp(bp->iface, iface)) { del_kernel_ax25_route(bp->iface, &bp->call);
ax25_rt_entry *update_ax25_route(config *config, ax25_address *call, int ndigi, ax25_address *digi, time_t timestamp){	ax25_rt_entry *bp = ax25_routes;	ax25_rt_entry *bp_prev = ax25_routes;	unsigned char *iface = config->dev;	int action = 0;		while (bp)	{		if (!memcmp(call, &bp->call, AXLEN) )		{			if (bp->timestamp == 0 && timestamp != 0)				return NULL;            		if (strcmp(bp->iface, iface))			{                   		del_kernel_ax25_route(bp->iface, &bp->call);                   		action |= NEW_ROUTE;			       	strcpy(bp->iface, iface);            		}            			if (ndigi != bp->ndigi || memcmp(bp->digipeater, digi, bp->ndigi*AXLEN))			{				action |= NEW_ROUTE;				memcpy(bp->digipeater, digi, ndigi*AXLEN);				bp->ndigi = ndigi;			}								bp->timestamp = timestamp;			if (bp != ax25_routes)			{				if (bp->next)					bp->next->prev = bp->prev;				if (bp->prev)					bp->prev->next = bp->next;									bp->next    = ax25_routes;				bp->prev    = NULL;				ax25_routes->prev = bp;				ax25_routes = bp;			}						if (action)				return bp;			else				return NULL;		}		bp_prev = bp;		bp = bp->next;	}		if (ax25_routes_cnt >= ax25_maxroutes)	{		if (bp_prev == NULL)	/* error */			return NULL;					bp_prev->prev->next = NULL;		free(bp_prev);		ax25_routes_cnt--;	}		bp = (ax25_rt_entry *) malloc(sizeof(ax25_rt_entry));	if (bp == NULL)		return NULL;	ax25_routes_cnt++;	bp->timestamp = timestamp;	strcpy(bp->iface, iface);	bp->call = *call;	if (ndigi)		memcpy(bp->digipeater, digi, ndigi*AXLEN);	bp->ndigi = ndigi;	if (ax25_routes == NULL)	{		ax25_routes = bp;		bp->next = bp->prev = NULL;		return bp;	}		bp->next    = ax25_routes;	bp->prev    = NULL;	ax25_routes->prev = bp;	ax25_routes = bp;	return bp;}