static void
make_path( routing_switch *routing_switch, uint64_t in_datapath_id, uint16_t in_port,
           uint64_t out_datapath_id, uint16_t out_port, const buffer *packet ) {
  dlist_element *hops = resolve_path( routing_switch->pathresolver, in_datapath_id, in_port, out_datapath_id, out_port );

  if ( hops == NULL ) {
    warn( "No available path found ( %#" PRIx64 ":%u -> %#" PRIx64 ":%u ).",
          in_datapath_id, in_port, out_datapath_id, out_port );
    discard_packet_in( in_datapath_id, in_port, packet );
    return;
  }

  // count elements
  uint32_t hop_count = count_hops( hops );

  // send flow entry from tail switch
  for ( dlist_element *e = get_last_element( hops ); e != NULL; e = e->prev, hop_count-- ) {
    uint16_t idle_timer = ( uint16_t ) ( routing_switch->idle_timeout + hop_count );
    modify_flow_entry( e->data, packet, idle_timer );
  } // for(;;)

  // send packet out for tail switch
  dlist_element *e = get_last_element( hops );
  pathresolver_hop *last_hop = e->data;
  output_packet_from_last_switch( last_hop, packet );

  // free them
  free_hop_list( hops );
}
Esempio n. 2
0
// "alpha" <-> "bravo" <-> "charlie"
static void
test_get_last_element() {
    char element_data2[] = "bravo";
    char element_data3[] = "charlie";

    dlist_element *alpha = create_dlist();
    dlist_element *bravo = insert_after_dlist( alpha, element_data2 );
    dlist_element *charlie = insert_after_dlist( bravo, element_data3 );

    assert_true( get_last_element( alpha ) == charlie );
    assert_true( get_last_element( bravo ) == charlie );
    assert_true( get_last_element( charlie ) == charlie );

    delete_dlist( alpha );
}
Esempio n. 3
0
static void
make_path( sliceable_switch *sliceable_switch, uint64_t in_datapath_id, uint16_t in_port, uint16_t in_vid,
           uint64_t out_datapath_id, uint16_t out_port, uint16_t out_vid, const buffer *packet ) {
  dlist_element *hops = resolve_path( sliceable_switch->pathresolver, in_datapath_id, in_port, out_datapath_id, out_port );
  if ( hops == NULL ) {
    warn( "No available path found ( %#" PRIx64 ":%u -> %#" PRIx64 ":%u ).",
          in_datapath_id, in_port, out_datapath_id, out_port );
    discard_packet_in( in_datapath_id, in_port, packet );
    return;
  }

  // check if the packet is ARP or not
  if ( sliceable_switch->handle_arp_with_packetout && packet_type_arp( packet ) ) {
    // send packet out for tail switch
    free_hop_list( hops );
    output_packet( packet, out_datapath_id, out_port, out_vid );
    return;
  }

  const uint32_t wildcards = 0;
  struct ofp_match match;
  set_match_from_packet( &match, in_port, wildcards, packet );

  if ( lookup_path( in_datapath_id, match, PRIORITY ) != NULL ) {
    warn( "Duplicated path found." );
    output_packet( packet, out_datapath_id, out_port, out_vid );
    return;
  }

  const uint16_t hard_timeout = 0;
  path *p = create_path( match, PRIORITY, sliceable_switch->idle_timeout, hard_timeout );
  assert( p != NULL );
  for ( dlist_element *e = get_first_element( hops ); e != NULL; e = e->next ) {
    pathresolver_hop *rh = e->data;
    hop *h = create_hop( rh->dpid, rh->in_port_no, rh->out_port_no, NULL );
    assert( h != NULL );
    append_hop_to_path( p, h );
  } // for(;;)

  dlist_element *e = get_last_element( hops );
  pathresolver_hop *last_hop = e->data;
  packet_out_params *params = xmalloc( sizeof( struct packet_out_params ) );
  params->packet = duplicate_buffer( packet );
  params->out_datapath_id = last_hop->dpid;
  params->out_port_no = last_hop->out_port_no;
  params->out_vid = out_vid;

  bool ret = setup_path( p, handle_setup, params, NULL, NULL );
  if ( ret != true ) {
    error( "Failed to set up path." );
    output_packet( packet, out_datapath_id, out_port, out_vid );
    free_buffer( params->packet );
    xfree( params );
  }

  delete_path( p );

  // free them
  free_hop_list( hops );
}
Esempio n. 4
0
void test_get_last_element_char(){
	LinkedList list = createList();
	char letter[] = "a";
	char letter1[] = "b";
	add_to_list(&list,letter);
	add_to_list(&list,letter1);
	assert(strcmp((char *)get_last_element(list),"b")==0);
}
Esempio n. 5
0
void test_get_last_element(){
  LinkedList list = createList();
  void *item = (int *)malloc(sizeof(int));
  *(int *)item = 20;

  int length = add_to_list(&list, item);
  assert(*(int *)get_last_element(list) == 20);
  
  void *item1 = (int *)malloc(sizeof(int));
  *(int *)item1 = 10;
  length = add_to_list(&list, item1);
  
  assert(*(int *)get_last_element(list) == 10);

  printf("last item is changed afetr insertion of new element\n");

}
Esempio n. 6
0
void test_get_last_element_float(){
	LinkedList list = createList();
	float a = 15.7,b=20.0;
	add_to_list(&list,&a);
	add_to_list(&list,&b);
	float first = *(float *)get_last_element(list); 
	assert(first==b);
}
Esempio n. 7
0
void test_get_last_element_emptystring(){
	LinkedList list = createList();
	char letter1[] = "babitha";
	char letter[] = "";
	add_to_list(&list,letter1);
	add_to_list(&list,letter);
	assert(strcmp((char *)get_last_element(list),"")==0);
}
Esempio n. 8
0
void test_get_last_element(){
	LinkedList list = createList();
	int num = 10,num1 = 9,num2 = 8;
	add_to_list(&list,&num);
	add_to_list(&list,&num1);
	add_to_list(&list,&num2);
	int * result = get_last_element(list);
	assert(8==*result);
}
Esempio n. 9
0
datalog_element *datalog_definition::attach_element(datalog_element *e) {
  e->next = NULL;
  if(is_empty() == true) { // first element
    element = e;
  } else {
    datalog_element *last = get_last_element();
    last->next = e;
  }
  return e;
}
Esempio n. 10
0
void test_get_last_element_string() {
  LinkedList list = createList();
  char value[] = "The";
  char value1[] = "World";
  char value2[] = "Beautiful";
  add_to_list(&list, &value);
  add_to_list(&list, &value1);
  add_to_list(&list, &value2);
  assert(value2 == (char *)get_last_element(list));
};
Esempio n. 11
0
void test_get_last_element_double() {
  LinkedList list = createList();
  double value = 4.302;
  double value1 = 3.211;
  double value2 = 7.02;
  add_to_list(&list, &value);
  add_to_list(&list, &value1);
  add_to_list(&list, &value2);
  assert(7.02 == *(double *)get_last_element(list));
};
Esempio n. 12
0
void last_element(void) {
	LinkedList list = create();
	int x = 3;
	int y = 5;
	add(&list, &x);
	add(&list, &y);
	Element *ele = get_last_element(list);
	int *value = ele -> value;
	assert(*value == 5);
};
Esempio n. 13
0
void test_get_last_element_int() {
  LinkedList list = createList();
  int value = 4;
  int value1 = 3;
  int value2 = 7;
  add_to_list(&list, &value);
  add_to_list(&list, &value1);
  add_to_list(&list, &value2);
  assert(7 == *(int *)get_last_element(list));
};
Esempio n. 14
0
void test_get_last_element(){
	LinkedList list = createList();
	int number = 44, number2 = 33, number3 = 23;
	add_to_list(&list, &number);
	add_to_list(&list, &number2);
	add_to_list(&list, &number3);

	void *last_element = get_last_element(list);
	assert(_TYPEINT_(last_element) == 23);
};
Esempio n. 15
0
static void
resolve_path_replied( void *user_data, dlist_element *hops ) {
  assert( user_data != NULL );

  resolve_path_replied_params *param = user_data;
  routing_switch *routing_switch = param->routing_switch;
  buffer *original_packet = param->original_packet;

  if ( hops == NULL ) {
    warn( "No available path found." );
    free_buffer( original_packet );
    xfree( param );
    return;
  }

  original_packet->user_data = NULL;
  if ( !parse_packet( original_packet ) ) {
    warn( "Received unsupported packet" );
    free_packet( original_packet );
    free_hop_list( hops );
    xfree( param );
    return;
  }

  // count elements
  uint32_t hop_count = count_hops( hops );

  // send flow entry from tail switch
  for ( dlist_element *e  = get_last_element( hops ); e != NULL; e = e->prev, hop_count-- ) {
    uint16_t idle_timer = ( uint16_t ) ( routing_switch->idle_timeout + hop_count );
    modify_flow_entry( e->data, original_packet, idle_timer );
  } // for(;;)

  // send packet out for tail switch
  dlist_element *e = get_last_element( hops );
  pathresolver_hop *last_hop = e->data;
  output_packet_from_last_switch( last_hop, original_packet );

  // free them
  free_hop_list( hops );
  free_packet( original_packet );
  xfree( param );
}
Esempio n. 16
0
void test_get_last_element_char() {
  LinkedList list = createList();
  char value = 'S';
  char value1 = 'A';
  char value2 = 'X';
  add_to_list(&list, &value);
  add_to_list(&list, &value1);
  add_to_list(&list, &value2);
  assert('X' == *(char *)get_last_element(list));
};
Esempio n. 17
0
void test_get_last_element_float() {
  LinkedList list = createList();
  float value = 4.302;
  float value1 = 3.211;
  float value2 = 7.02;
  add_to_list(&list, &value);
  add_to_list(&list, &value1);
  add_to_list(&list, &value2);
  assert(value2 == *(float *)get_last_element(list));
};
Esempio n. 18
0
void test_for_get_last_element_returns_last_element_from_the_CHAR_type_of_list(){
  Linked_list list = createList();
  char _1st,_2nd,_3rd;
  _1st ='a';
  _2nd ='g';
  _3rd ='9';
  add_to_list(&list ,&_1st);
  add_to_list(&list ,&_2nd);
  add_to_list(&list ,&_3rd);
  assert(TYPECHAR(get_last_element(list))=='9');
}
Esempio n. 19
0
void test_for_get_last_element_returns_last_element_from_the_float_type_of_list(){
  Linked_list list = createList();
  float _1st,_2nd,_3rd;
  _1st =905.5;
  _2nd =87.0;
  _3rd =78.50;
  add_to_list(&list ,&_1st);
  add_to_list(&list ,&_2nd);
  add_to_list(&list ,&_3rd);
  assert(TYPEFLOAT(get_last_element(list))==78.50);
}
Esempio n. 20
0
void test_for_get_last_element_returns_last_element_from_the_double_type_of_list(){
  Linked_list list = createList();
  double _1st,_2nd,_3rd;
  _1st =999999999999.555555559587439857349508734958374598347598373948573948;
  _2nd =857349857349857349857349857349857349587.0;
  _3rd =7840583409584309583409583409583409583405934.5093740932487329048320943029482309482309;
  add_to_list(&list ,&_1st);
  add_to_list(&list ,&_2nd);
  add_to_list(&list ,&_3rd);
  assert(TYPEDOUBLE(get_last_element(list))==_3rd);
}
Esempio n. 21
0
void test_get_last_element() {
    LinkedList list = createList();
    int element = 12;
    add_to_list(&list,&element);
    int element1 = 13;
    add_to_list(&list,&element1);
    int element2 = 14;
    add_to_list(&list,&element2);
    int *value = get_last_element(list);
    assert(14 == *value);
}
Esempio n. 22
0
void test_reverse_using_getLastElement(){
	LinkedList list = createList();

	int number = 12, number2 = 33, number3 = 23, number4 = 44, number5 = 23;
	add_to_list(&list, &number);
	add_to_list(&list, &number2);
	add_to_list(&list, &number3);
	add_to_list(&list, &number4);
	add_to_list(&list, &number5);

	LinkedList reverse_list = reverse(list);
	void *get_reverse_ele = get_last_element(reverse_list);
	assert(_TYPEINT_(get_reverse_ele) == 12);	
};
Esempio n. 23
0
void test_for_get_last_element_returns_last_element_from_the_INT_type_of_list(){
  Linked_list list = createList();
  int _1st,_2nd,_3rd,_4th,_5th;
  _1st =23;
  _2nd =24;
  _3rd =25;
  _4th =26;
  _5th =27;
  add_to_list(&list ,&_1st);
  add_to_list(&list ,&_2nd);
  add_to_list(&list ,&_3rd);
  add_to_list(&list ,&_4th);
  add_to_list(&list ,&_5th);
  assert(TYPEINT(get_last_element(list))==27);
}
Esempio n. 24
0
void test_to_get_last_element_of_list() {
    LinkedList list = createList();
    int ele1 = 25;
    int ele2 = 55;
    int ele3 = 35;
    int ele4 = 15;
    int ele5 = 5;
    add_to_list(&list,&ele1);
    add_to_list(&list,&ele2);
    add_to_list(&list,&ele3);
    add_to_list(&list,&ele4);
    add_to_list(&list,&ele5);
    void *head = get_last_element(list);
    assert(*(int *)head==5);
}
void test_get_lsst_element(){
	LinkedList list = createList();
	int *item =(int*)malloc( sizeof(int));
	*item = 10;
	float *value =(float*)malloc( sizeof(float));
	*value = 11.23;
	assert(1 == add_to_list(&list,item)); 
	assert(2 == add_to_list(&list,value)); 
	item =(int*)malloc( sizeof(int));
	*item = 33;
	assert(3 == add_to_list(&list,item));


	Element * lastElement =  get_last_element(list);
	assert(33 == *(int*)lastElement->value);
}
Esempio n. 26
0
void test_for_get_LAST_element_returns_LAST_element_from_the_STRUCTURE_type_of_list(){
  Linked_list list = createList();
  typedef struct Intern{
    int age;
    char *name;
    char *companyName;
  }intern;
    intern i,j;
    i.age=23;
    i.name="Seeta";
    i.companyName="ThoughtWorks";
  int k=23;
  add_to_list(&list ,&k);
  add_to_list(&list,&i);
  j=*(intern *)get_last_element(list);
  assert(i.age==j.age);
  assert(i.name==j.name);
  assert(i.companyName==j.companyName);

}
Esempio n. 27
0
File: switch.c Progetto: iqm/apps
static void
output_packet_from_last_switch( dlist_element *hops, const buffer *packet ) {
  dlist_element *e = get_last_element( hops );
  path_resolver_hop *last_hop = e->data;
  output_packet( packet, last_hop->dpid, last_hop->out_port_no );
}
Esempio n. 28
0
static void
test_get_last_element_aborts_with_NULL_dlist() {
    expect_string( mock_die, output, "element must not be NULL" );
    expect_assert_failure( get_last_element( NULL ) );
}