X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Finterfaces%2Fvmm_packet.c;h=b46325ee518843adf3502c94cb172a711415cce2;hb=9a32111c4074aafd55cd9590a24bd5c751a6fe61;hp=a813a7cdef083553871e1f2a600dee3303c79076;hpb=ba178554a5f6714e5ceb7b77df462ac72de90b0c;p=palacios.git diff --git a/palacios/src/interfaces/vmm_packet.c b/palacios/src/interfaces/vmm_packet.c index a813a7c..b46325e 100644 --- a/palacios/src/interfaces/vmm_packet.c +++ b/palacios/src/interfaces/vmm_packet.c @@ -16,44 +16,57 @@ * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "V3VEE_LICENSE". */ - -#include +#include #include #include #include -#include +#include static struct v3_packet_hooks * packet_hooks = 0; -int V3_send_raw(const char * pkt, uint32_t len) { - if(packet_hooks != NULL && packet_hooks->send != NULL){ - return packet_hooks->send(pkt, len, NULL); - } +void V3_Init_Packet(struct v3_packet_hooks * hooks) { + packet_hooks = hooks; + PrintDebug("V3 raw packet interface inited\n"); - return -1; + return; } +struct v3_packet * v3_packet_connect(struct v3_vm_info * vm, + const char * host_nic, + const char * vm_mac, + int (*input)(struct v3_packet * packet, uint8_t * buf, uint32_t len), + void * guest_packet_data) { + struct v3_packet * packet = NULL; -int V3_packet_add_recver(const char * mac, struct v3_vm_info * vm){ - if(packet_hooks != NULL && packet_hooks->add_recver != NULL){ - return packet_hooks->add_recver(mac, vm); - } - - return -1; -} + V3_ASSERT(packet_hooks != NULL); + V3_ASSERT(packet_hooks->connect != NULL); + packet = V3_Malloc(sizeof(struct v3_packet)); -int V3_packet_del_recver(const char * mac, struct v3_vm_info * vm){ - if(packet_hooks != NULL && packet_hooks->del_recver != NULL){ - return packet_hooks->del_recver(mac, vm); + memcpy(packet->dev_mac, vm_mac, ETH_ALEN); + packet->input = input; + packet->guest_packet_data = guest_packet_data; + if(packet_hooks->connect(packet, host_nic, vm->host_priv_data) != 0){ + V3_Free(packet); + return NULL; } - return -1; + return packet; } -void V3_Init_Packet(struct v3_packet_hooks * hooks) { - packet_hooks = hooks; - PrintDebug("V3 raw packet interface inited\n"); +int v3_packet_send(struct v3_packet * packet, uint8_t * buf, uint32_t len) { + V3_ASSERT(packet_hooks != NULL); + V3_ASSERT(packet_hooks->send != NULL); + + return packet_hooks->send(packet, buf, len); +} - return; +void v3_packet_close(struct v3_packet * packet) { + V3_ASSERT(packet_hooks != NULL); + V3_ASSERT(packet_hooks->close != NULL); + + packet_hooks->close(packet); + V3_Free(packet); } + +