Exemple #1
0
void rtps_rw_state_change (RemWriter_t *rwp,
			   unsigned    s,
			   unsigned    prev_s,
			   int         init,
			   unsigned    type)
{
	const char	*sp;
	Locator_t	*lp;

	if (init)
		sp = ".";
	else if (s != prev_s)
		sp = rtps_rw_state_str (type, prev_s);
	else
		return;

	if (rwp->rw_reader->endpoint.stateful) {
		if (rwp->rw_uc_locs)
			lp = &rwp->rw_uc_locs->data->locator;
		else if (rwp->rw_mc_locs)
			lp = &rwp->rw_mc_locs->data->locator;
		else
			lp = NULL;
	}
	else
		lp = NULL;
	rtps_trace_r_event (rwp->rw_reader, 'S', locator_str (lp));
	log_printf (RTPS_ID, 0, "%s -> %s\r\n", sp, rtps_rw_state_str (type, s));
}
Exemple #2
0
void rtps_rw_signal (RemWriter_t *rwp, const char *s)
{
	Locator_t	*lp;

	if (rwp->rw_uc_locs)
		lp = &rwp->rw_uc_locs->data->locator;
	else if (rwp->rw_mc_locs)
		lp = &rwp->rw_mc_locs->data->locator;
	else
		lp = NULL;
	rtps_trace_r_event (rwp->rw_reader, 'C', locator_str (lp));
	log_printf (RTPS_ID, 0, "%s;\r\n", s);
}
Exemple #3
0
void rtps_r_tmr_action (READER          *rp,
			const Locator_t *lp,
			const char      *type,
			int             start,
			unsigned        ticks,
			const char      *sp)
{
	rtps_trace_r_event (rp, 'T', type);
	if (lp)
		log_printf (RTPS_ID, 0, "%s: ", locator_str (lp));
	log_printf (RTPS_ID, 0, "%s Timer", (start) ? "Start" : "Stop");
	if (sp)
		log_printf (RTPS_ID, 0, "_%s", sp);
	if (start)
		log_printf (RTPS_ID, 0, " (%u.%02u secs)", ticks / 100, ticks % 100);
	log_printf (RTPS_ID, 0, "\r\n");
}
Exemple #4
0
void rtps_rr_signal (RemReader_t *rrp, const char *s)
{
	Locator_t	*lp;

	if (rrp->rr_writer->endpoint.stateful) {
		if (rrp->rr_uc_locs)
			lp = &rrp->rr_uc_locs->data->locator;
		else if (rrp->rr_mc_locs)
			lp = &rrp->rr_mc_locs->data->locator;
		else
			lp = NULL;
	}
	else
		lp = &rrp->rr_locator->locator;
	rtps_trace_w_event (rrp->rr_writer, 'C', locator_str (lp));
	log_printf (RTPS_ID, 0, "%s;\r\n", s);
}
Exemple #5
0
int locator_list_copy_node (LocatorList_t *list,
			    LocatorNode_t *np)
{
	LocatorRef_t	*rp, *p;

	for (rp = *list; rp; rp = rp->next)
		if (rp->data == np)	/* Already there! */
			return (0);

#ifdef LOG_LOCATORS
	log_printf (LOC_ID, 0, "LOC: locator_list_copy_node (list=%p, %s)\r\n", (void *) list, locator_str (&np->locator));
#endif
	rp = mds_pool_alloc (&mem_blocks [MB_LOCREF]);
	if (!rp)
		return (1);

	rp->next = NULL;
	rp->data = np;
	np->users++;
	if (*list) {
		for (p = *list; p->next; p = p->next)
			;
		p->next = rp;
	}
	else
		*list = rp;
	return (0);
}
Exemple #6
0
LocatorNode_t *locator_list_add (LocatorList_t       *list,
				 LocatorKind_t       kind,
				 const unsigned char *addr,
				 uint32_t            port,
				 uint32_t            scope_id,
				 Scope_t             scope,
				 unsigned            flags,
				 unsigned            sproto)
{
	LocatorNode_t	*np;
	LocatorRef_t	*rp, *p;

	lock_take (loc_lock);
	np = locator_new_node (kind, addr, port);
	if (!np) {
		lock_release (loc_lock);
		return (NULL);
	}
	if (np->users == 1) {
		np->locator.scope_id = scope_id;
		np->locator.scope = scope;
		np->locator.flags = flags;
		np->locator.sproto = sproto;
	}
	else {
		if (np->locator.scope_id != scope_id ||
		    (np->locator.scope && scope && np->locator.scope != scope) ||
		    /*(np->locator.flags && flags && 
		     (np->locator.flags & LOCF_MFLAGS) != (flags & LOCF_MFLAGS)) ||*/
		    (np->locator.sproto && sproto && np->locator.sproto != sproto))
			log_printf (LOC_ID, 0, "locator_list_add: incompatible locator attributes for %s, "
						"%u:%u, %u:%u, 0x%x:0x%x, %u:%u!\r\n",
					locator_str (&np->locator),
					np->locator.scope_id, scope_id,
					np->locator.scope, scope,
					np->locator.flags, flags,
					np->locator.sproto, sproto);

		if (!np->locator.scope_id && scope_id)
			np->locator.scope_id = scope_id;
		if (!np->locator.scope && scope)
			np->locator.scope = scope;
		if (flags && np->locator.flags != flags)
			np->locator.flags |= flags;
		if (!np->locator.sproto && sproto)
			np->locator.sproto = sproto;

		/* Check if already in list. */
		for (rp = *list; rp; rp = rp->next)
			if (rp->data == np) {	/* Already there! */
				np->users--;
				lock_release (loc_lock);
				return (0);
			}
	}
#ifdef LOG_LOCATORS
	log_printf (LOC_ID, 0, "LOC: locator_list_add (list=%p, %s)\r\n", (void *) list, locator_str (&np->locator));
#endif
	rp = mds_pool_alloc (&mem_blocks [MB_LOCREF]);
	if (!rp) {
		warn_printf ("locator_list_add: not enough memory for locator reference!\r\n");
		lock_release (loc_lock);
		locator_unref (np);
		return (NULL);
	}
	rp->next = NULL;
	rp->data = np;
 	lock_release (loc_lock);
	if (*list) {
		for (p = *list; p->next; p = p->next)
			;
		p->next = rp;
	}
	else
		*list = rp;
	return (np);
}
Exemple #7
0
LocatorNode_t *locator_list_add (LocatorList_t       *list,
				 LocatorKind_t       kind,
				 const unsigned char *addr,
				 uint32_t            port,
				 uint32_t            scope_id,
				 Scope_t             scope,
				 unsigned            flags,
				 unsigned            sproto)
{
	LocSearchData	data;
	LocatorNode_t	**npp, *np;
	LocatorRef_t	*rp, *p;
	int		is_new;

	data.kind = kind;
	data.addr = addr;
	data.port = port;

	lock_take (loc_lock);
	npp = sl_insert (&loc_list, &data, &is_new, loc_cmp);
	if (!npp) {
		warn_printf ("locator_list_add: not enough memory for list node!");
		lock_release (loc_lock);
		return (NULL);
	}
	if (is_new) {
		np = mds_pool_alloc (&mem_blocks [MB_LOCATOR]);
		if (!np) {
			warn_printf ("locator_list_add: not enough memory for locator node!");
#ifdef LIST_DELETE_NODE
			sl_delete_node (&loc_list, npp);
#else
			sl_delete (&loc_list, &data, loc_cmp);
#endif
			lock_release (loc_lock);
			return (NULL);
		}
		np->users = 0;
		np->locator.kind = kind;
		np->locator.port = port;
		memcpy (np->locator.address, addr, sizeof (np->locator.address));
		np->locator.scope_id = scope_id;
		np->locator.scope = scope;
		np->locator.flags = flags;
		np->locator.sproto = sproto;
		np->locator.intf = 0;
		np->locator.handle = 0;
		*npp = np;
	}
	else {
		np = *npp;
		if (np->locator.scope_id != scope_id ||
		    (np->locator.scope && scope && np->locator.scope != scope) ||
		    /*(np->locator.flags && flags && 
		     (np->locator.flags & LOCF_MFLAGS) != (flags & LOCF_MFLAGS)) ||*/
		    (np->locator.sproto && sproto && np->locator.sproto != sproto))
			log_printf (LOC_ID, 0, "locator_list_add: incompatible locator attributes for %s, "
						"%u:%u, %u:%u, 0x%x:0x%x, %u:%u!\r\n",
					locator_str (&np->locator),
					np->locator.scope_id, scope_id,
					np->locator.scope, scope,
					np->locator.flags, flags,
					np->locator.sproto, sproto);

		if (!np->locator.scope_id && scope_id)
			np->locator.scope_id = scope_id;
		if (!np->locator.scope && scope)
			np->locator.scope = scope;
		if (flags && np->locator.flags != flags)
			np->locator.flags |= flags;
		if (!np->locator.sproto && sproto)
			np->locator.sproto = sproto;

		/* Check if already in list. */
		for (rp = *list; rp; rp = rp->next)
			if (rp->data == np) {	/* Already there! */
				lock_release (loc_lock);
				return (0);
			}
	}
#ifdef LOG_LOCATORS
	log_printf (LOC_ID, 0, "LOC: locator_list_add (list=%p, %s)\r\n", (void *) list, locator_str (&np->locator));
#endif
	rp = mds_pool_alloc (&mem_blocks [MB_LOCREF]);
	if (!rp) {
		warn_printf ("locator_list_add: not enough memory for locator reference!\r\n");
		if (is_new) {
			mds_pool_free (&mem_blocks [MB_LOCATOR], np);
#ifdef LIST_DELETE_NODE
			sl_delete_node (&loc_list, npp);
#else
			sl_delete (&loc_list, &data, loc_cmp);
#endif
		}
		lock_release (loc_lock);
		return (NULL);
	}
	rp->next = NULL;
	rp->data = np;
	np->users++;
 	lock_release (loc_lock);
	if (*list) {
		for (p = *list; p->next; p = p->next)
			;
		p->next = rp;
	}
	else
		*list = rp;
	return (np);
}