Exemple #1
0
/**
 * Set limit of TBF qdisc by latency.
 * @arg qdisc		TBF qdisc to be modified.
 * @arg latency		Latency in micro seconds.
 *
 * Calculates and sets the limit based on the desired latency and the
 * configured rate and peak rate. In order for this operation to succeed,
 * the rate and if required the peak rate must have been set in advance.
 *
 * @f[
 *   limit_n = \frac{{rate_n} \times {latency}}{10^6}+{bucketsize}_n
 * @f]
 * @f[
 *   limit = min(limit_{rate},limit_{peak})
 * @f]
 * 
 * @return 0 on success or a negative error code.
 */
int rtnl_qdisc_tbf_set_limit_by_latency(struct rtnl_qdisc *qdisc, int latency)
{
	struct rtnl_tbf *tbf;
	double limit, limit2;

	if (!(tbf = rtnl_tc_data(TC_CAST(qdisc))))
		BUG();

	if (!(tbf->qt_mask & TBF_ATTR_RATE))
		return -NLE_MISSING_ATTR;

	limit = calc_limit(&tbf->qt_rate, latency, tbf->qt_rate_bucket);

	if (tbf->qt_mask & TBF_ATTR_PEAKRATE) {
		limit2 = calc_limit(&tbf->qt_peakrate, latency,
				    tbf->qt_peakrate_bucket);

		if (limit2 < limit)
			limit = limit2;
	}

	rtnl_qdisc_tbf_set_limit(qdisc, (int) limit);

	return 0;
}
Exemple #2
0
int		inter_tore(t_camera *camera, t_object *object,
			   t_detail *detail, double *vector)
{
  double	k;
  double	k_tab[4];
  double	indice[5];

  if (!camera || !object || !detail || !vector ||
      inter_indice_tore(camera, object, vector, indice))
    return (EXIT_FAILURE);
  inter_equation4deg(indice, k_tab);
  if (object->image != NULL && object->image->type_texture == 1)
    if (calc_cut_texture(k_tab, object, vector, camera))
      return (EXIT_FAILURE);
  calc_limit(object, camera->position, vector, &k_tab[0]);
  calc_limit(object, camera->position, vector, &k_tab[1]);
  calc_limit(object, camera->position, vector, &k_tab[2]);
  calc_limit(object, camera->position, vector, &k_tab[3]);
  k = calcul_solution_smallest(k_tab);
  if (k > CONST_ERROR && (k < detail->k || detail->k < CONST_ERROR))
    {
      detail->k = k;
      detail->object = object;
    }
  return (EXIT_SUCCESS);
}
Exemple #3
0
int
inter_plan(t_camera *camera, t_object *object, t_detail *detail, double *vector)
{
  double	k;
  double	pos[NB_DIMENSION];
  double	u[NB_DIMENSION];

  if (!camera || !object || !detail || !vector)
    return (EXIT_FAILURE);
  modif_position(camera->position, object, pos, INVERSE_ROTATION);
  modif_vector(object->rotation, vector, u, INVERSE_ROTATION);
  if (!u[Z])
    u[Z] += EPSILON;
  k = (pos[Z] * (-1.0F)) / (u[Z] + 0.0000001F);
  if (object->limit != NULL &&
      calc_limit(object->limit, camera->position, vector, &k))
    return (EXIT_FAILURE);
  if (k > CONST_ERROR && (k < detail->k || detail->k < CONST_ERROR))
    {
      detail->k = k;
      detail->object = object;
    }
  return (EXIT_SUCCESS);
}