@ -132,11 +132,11 @@ int parse_host_port(struct sockaddr_in *saddr, const char *str)
return 0 ;
}
void qemu_format_nic_info_str ( NetClientState * v c, uint8_t macaddr [ 6 ] )
void qemu_format_nic_info_str ( NetClientState * n c, uint8_t macaddr [ 6 ] )
{
snprintf ( v c- > info_str , sizeof ( v c- > info_str ) ,
snprintf ( n c- > info_str , sizeof ( n c- > info_str ) ,
" model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x " ,
v c- > model ,
n c- > model ,
macaddr [ 0 ] , macaddr [ 1 ] , macaddr [ 2 ] ,
macaddr [ 3 ] , macaddr [ 4 ] , macaddr [ 5 ] ) ;
}
@ -162,19 +162,19 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
* Only net clients created with the legacy - net option need this . Naming is
* mandatory for net clients created with - netdev .
*/
static char * assign_name ( NetClientState * v c1, const char * model )
static char * assign_name ( NetClientState * n c1, const char * model )
{
NetClientState * v c;
NetClientState * n c;
char buf [ 256 ] ;
int id = 0 ;
QTAILQ_FOREACH ( v c, & net_clients , next ) {
if ( vc = = v c1) {
QTAILQ_FOREACH ( n c, & net_clients , next ) {
if ( nc = = n c1) {
continue ;
}
/* For compatibility only bump id for net clients on a vlan */
if ( strcmp ( v c- > model , model ) = = 0 & &
net_hub_id_for_client ( v c, NULL ) = = 0 ) {
if ( strcmp ( n c- > model , model ) = = 0 & &
net_hub_id_for_client ( n c, NULL ) = = 0 ) {
id + + ;
}
}
@ -200,32 +200,32 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
const char * model ,
const char * name )
{
NetClientState * v c;
NetClientState * n c;
assert ( info - > size > = sizeof ( NetClientState ) ) ;
v c = g_malloc0 ( info - > size ) ;
n c = g_malloc0 ( info - > size ) ;
v c- > info = info ;
v c- > model = g_strdup ( model ) ;
n c- > info = info ;
n c- > model = g_strdup ( model ) ;
if ( name ) {
v c- > name = g_strdup ( name ) ;
n c- > name = g_strdup ( name ) ;
} else {
v c- > name = assign_name ( v c, model ) ;
n c- > name = assign_name ( n c, model ) ;
}
if ( peer ) {
assert ( ! peer - > peer ) ;
v c- > peer = peer ;
peer - > peer = v c;
n c- > peer = peer ;
peer - > peer = n c;
}
QTAILQ_INSERT_TAIL ( & net_clients , v c, next ) ;
QTAILQ_INSERT_TAIL ( & net_clients , n c, next ) ;
v c- > send_queue = qemu_new_net_queue ( qemu_deliver_packet ,
n c- > send_queue = qemu_new_net_queue ( qemu_deliver_packet ,
qemu_deliver_packet_iov ,
v c) ;
n c) ;
return v c;
return n c;
}
NICState * qemu_new_nic ( NetClientInfo * info ,
@ -249,56 +249,56 @@ NICState *qemu_new_nic(NetClientInfo *info,
return nic ;
}
static void qemu_cleanup_vlan_client ( NetClientState * v c)
static void qemu_cleanup_vlan_client ( NetClientState * n c)
{
QTAILQ_REMOVE ( & net_clients , v c, next ) ;
QTAILQ_REMOVE ( & net_clients , n c, next ) ;
if ( v c- > info - > cleanup ) {
v c- > info - > cleanup ( v c) ;
if ( n c- > info - > cleanup ) {
n c- > info - > cleanup ( n c) ;
}
}
static void qemu_free_vlan_client ( NetClientState * v c)
static void qemu_free_vlan_client ( NetClientState * n c)
{
if ( v c- > send_queue ) {
qemu_del_net_queue ( v c- > send_queue ) ;
if ( n c- > send_queue ) {
qemu_del_net_queue ( n c- > send_queue ) ;
}
if ( v c- > peer ) {
v c- > peer - > peer = NULL ;
if ( n c- > peer ) {
n c- > peer - > peer = NULL ;
}
g_free ( v c- > name ) ;
g_free ( v c- > model ) ;
g_free ( v c) ;
g_free ( n c- > name ) ;
g_free ( n c- > model ) ;
g_free ( n c) ;
}
void qemu_del_vlan_client ( NetClientState * v c)
void qemu_del_vlan_client ( NetClientState * n c)
{
/* If there is a peer NIC, delete and cleanup client, but do not free. */
if ( v c- > peer & & v c- > peer - > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC ) {
NICState * nic = DO_UPCAST ( NICState , nc , v c- > peer ) ;
if ( n c- > peer & & n c- > peer - > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC ) {
NICState * nic = DO_UPCAST ( NICState , nc , n c- > peer ) ;
if ( nic - > peer_deleted ) {
return ;
}
nic - > peer_deleted = true ;
/* Let NIC know peer is gone. */
v c- > peer - > link_down = true ;
if ( v c- > peer - > info - > link_status_changed ) {
v c- > peer - > info - > link_status_changed ( v c- > peer ) ;
n c- > peer - > link_down = true ;
if ( n c- > peer - > info - > link_status_changed ) {
n c- > peer - > info - > link_status_changed ( n c- > peer ) ;
}
qemu_cleanup_vlan_client ( v c) ;
qemu_cleanup_vlan_client ( n c) ;
return ;
}
/* If this is a peer NIC and peer has already been deleted, free it now. */
if ( v c- > peer & & v c- > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC ) {
NICState * nic = DO_UPCAST ( NICState , nc , v c) ;
if ( n c- > peer & & n c- > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC ) {
NICState * nic = DO_UPCAST ( NICState , nc , n c) ;
if ( nic - > peer_deleted ) {
qemu_free_vlan_client ( v c- > peer ) ;
qemu_free_vlan_client ( n c- > peer ) ;
}
}
qemu_cleanup_vlan_client ( v c) ;
qemu_free_vlan_client ( v c) ;
qemu_cleanup_vlan_client ( n c) ;
qemu_free_vlan_client ( n c) ;
}
void qemu_foreach_nic ( qemu_nic_foreach func , void * opaque )
@ -333,44 +333,44 @@ static ssize_t qemu_deliver_packet(NetClientState *sender,
size_t size ,
void * opaque )
{
NetClientState * v c = opaque ;
NetClientState * n c = opaque ;
ssize_t ret ;
if ( v c- > link_down ) {
if ( n c- > link_down ) {
return size ;
}
if ( v c- > receive_disabled ) {
if ( n c- > receive_disabled ) {
return 0 ;
}
if ( flags & QEMU_NET_PACKET_FLAG_RAW & & v c- > info - > receive_raw ) {
ret = v c- > info - > receive_raw ( v c, data , size ) ;
if ( flags & QEMU_NET_PACKET_FLAG_RAW & & n c- > info - > receive_raw ) {
ret = n c- > info - > receive_raw ( n c, data , size ) ;
} else {
ret = v c- > info - > receive ( v c, data , size ) ;
ret = n c- > info - > receive ( n c, data , size ) ;
}
if ( ret = = 0 ) {
v c- > receive_disabled = 1 ;
n c- > receive_disabled = 1 ;
} ;
return ret ;
}
void qemu_purge_queued_packets ( NetClientState * v c)
void qemu_purge_queued_packets ( NetClientState * n c)
{
if ( ! v c- > peer ) {
if ( ! n c- > peer ) {
return ;
}
qemu_net_queue_purge ( v c- > peer - > send_queue , v c) ;
qemu_net_queue_purge ( n c- > peer - > send_queue , n c) ;
}
void qemu_flush_queued_packets ( NetClientState * v c)
void qemu_flush_queued_packets ( NetClientState * n c)
{
v c- > receive_disabled = 0 ;
n c- > receive_disabled = 0 ;
qemu_net_queue_flush ( v c- > send_queue ) ;
qemu_net_queue_flush ( n c- > send_queue ) ;
}
static ssize_t qemu_send_packet_async_with_flags ( NetClientState * sender ,
@ -402,18 +402,18 @@ ssize_t qemu_send_packet_async(NetClientState *sender,
buf , size , sent_cb ) ;
}
void qemu_send_packet ( NetClientState * v c, const uint8_t * buf , int size )
void qemu_send_packet ( NetClientState * n c, const uint8_t * buf , int size )
{
qemu_send_packet_async ( v c, buf , size , NULL ) ;
qemu_send_packet_async ( n c, buf , size , NULL ) ;
}
ssize_t qemu_send_packet_raw ( NetClientState * v c, const uint8_t * buf , int size )
ssize_t qemu_send_packet_raw ( NetClientState * n c, const uint8_t * buf , int size )
{
return qemu_send_packet_async_with_flags ( v c, QEMU_NET_PACKET_FLAG_RAW ,
return qemu_send_packet_async_with_flags ( n c, QEMU_NET_PACKET_FLAG_RAW ,
buf , size , NULL ) ;
}
static ssize_t v c_sendv_compat( NetClientState * v c, const struct iovec * iov ,
static ssize_t n c_sendv_compat( NetClientState * n c, const struct iovec * iov ,
int iovcnt )
{
uint8_t buffer [ 4096 ] ;
@ -421,7 +421,7 @@ static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
offset = iov_to_buf ( iov , iovcnt , 0 , buffer , sizeof ( buffer ) ) ;
return v c- > info - > receive ( v c, buffer , offset ) ;
return n c- > info - > receive ( n c, buffer , offset ) ;
}
static ssize_t qemu_deliver_packet_iov ( NetClientState * sender ,
@ -430,16 +430,16 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
int iovcnt ,
void * opaque )
{
NetClientState * v c = opaque ;
NetClientState * n c = opaque ;
if ( v c- > link_down ) {
if ( n c- > link_down ) {
return iov_size ( iov , iovcnt ) ;
}
if ( v c- > info - > receive_iov ) {
return v c- > info - > receive_iov ( v c, iov , iovcnt ) ;
if ( n c- > info - > receive_iov ) {
return n c- > info - > receive_iov ( n c, iov , iovcnt ) ;
} else {
return vc_sendv_compat ( v c, iov , iovcnt ) ;
return nc_sendv_compat ( n c, iov , iovcnt ) ;
}
}
@ -461,20 +461,20 @@ ssize_t qemu_sendv_packet_async(NetClientState *sender,
}
ssize_t
qemu_sendv_packet ( NetClientState * v c, const struct iovec * iov , int iovcnt )
qemu_sendv_packet ( NetClientState * n c, const struct iovec * iov , int iovcnt )
{
return qemu_sendv_packet_async ( v c, iov , iovcnt , NULL ) ;
return qemu_sendv_packet_async ( n c, iov , iovcnt , NULL ) ;
}
NetClientState * qemu_find_netdev ( const char * id )
{
NetClientState * v c;
NetClientState * n c;
QTAILQ_FOREACH ( v c, & net_clients , next ) {
if ( v c- > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC )
QTAILQ_FOREACH ( n c, & net_clients , next ) {
if ( n c- > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC )
continue ;
if ( ! strcmp ( v c- > name , id ) ) {
return v c;
if ( ! strcmp ( n c- > name , id ) ) {
return n c;
}
}
@ -791,19 +791,19 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
void net_host_device_remove ( Monitor * mon , const QDict * qdict )
{
NetClientState * v c;
NetClientState * n c;
int vlan_id = qdict_get_int ( qdict , " vlan_id " ) ;
const char * device = qdict_get_str ( qdict , " device " ) ;
v c = net_hub_find_client_by_name ( vlan_id , device ) ;
if ( ! v c) {
n c = net_hub_find_client_by_name ( vlan_id , device ) ;
if ( ! n c) {
return ;
}
if ( ! net_host_check_device ( v c- > model ) ) {
if ( ! net_host_check_device ( n c- > model ) ) {
monitor_printf ( mon , " invalid host network device %s \n " , device ) ;
return ;
}
qemu_del_vlan_client ( v c) ;
qemu_del_vlan_client ( n c) ;
}
void netdev_add ( QemuOpts * opts , Error * * errp )
@ -843,36 +843,36 @@ exit_err:
void qmp_netdev_del ( const char * id , Error * * errp )
{
NetClientState * v c;
NetClientState * n c;
v c = qemu_find_netdev ( id ) ;
if ( ! v c) {
n c = qemu_find_netdev ( id ) ;
if ( ! n c) {
error_set ( errp , QERR_DEVICE_NOT_FOUND , id ) ;
return ;
}
qemu_del_vlan_client ( v c) ;
qemu_del_vlan_client ( n c) ;
qemu_opts_del ( qemu_opts_find ( qemu_find_opts_err ( " netdev " , errp ) , id ) ) ;
}
static void print_net_client ( Monitor * mon , NetClientState * v c)
static void print_net_client ( Monitor * mon , NetClientState * n c)
{
monitor_printf ( mon , " %s: type=%s,%s \n " , v c- > name ,
NetClientOptionsKind_lookup [ v c- > info - > type ] , v c- > info_str ) ;
monitor_printf ( mon , " %s: type=%s,%s \n " , n c- > name ,
NetClientOptionsKind_lookup [ n c- > info - > type ] , n c- > info_str ) ;
}
void do_info_network ( Monitor * mon )
{
NetClientState * v c, * peer ;
NetClientState * n c, * peer ;
NetClientOptionsKind type ;
monitor_printf ( mon , " Devices not on any VLAN: \n " ) ;
QTAILQ_FOREACH ( v c, & net_clients , next ) {
peer = v c- > peer ;
type = v c- > info - > type ;
QTAILQ_FOREACH ( n c, & net_clients , next ) {
peer = n c- > peer ;
type = n c- > info - > type ;
if ( ! peer | | type = = NET_CLIENT_OPTIONS_KIND_NIC ) {
monitor_printf ( mon , " " ) ;
print_net_client ( mon , v c) ;
print_net_client ( mon , n c) ;
} /* else it's a netdev connected to a NIC, printed with the NIC */
if ( peer & & type = = NET_CLIENT_OPTIONS_KIND_NIC ) {
monitor_printf ( mon , " \\ " ) ;
@ -884,23 +884,23 @@ void do_info_network(Monitor *mon)
void qmp_set_link ( const char * name , bool up , Error * * errp )
{
NetClientState * v c = NULL ;
NetClientState * n c = NULL ;
QTAILQ_FOREACH ( v c, & net_clients , next ) {
if ( ! strcmp ( v c- > name , name ) ) {
QTAILQ_FOREACH ( n c, & net_clients , next ) {
if ( ! strcmp ( n c- > name , name ) ) {
goto done ;
}
}
done :
if ( ! v c) {
if ( ! n c) {
error_set ( errp , QERR_DEVICE_NOT_FOUND , name ) ;
return ;
}
v c- > link_down = ! up ;
n c- > link_down = ! up ;
if ( v c- > info - > link_status_changed ) {
v c- > info - > link_status_changed ( v c) ;
if ( n c- > info - > link_status_changed ) {
n c- > info - > link_status_changed ( n c) ;
}
/* Notify peer. Don't update peer link status: this makes it possible to
@ -910,23 +910,23 @@ done:
* Current behaviour is compatible with qemu vlans where there could be
* multiple clients that can still communicate with each other in
* disconnected mode . For now maintain this compatibility . */
if ( v c- > peer & & v c- > peer - > info - > link_status_changed ) {
v c- > peer - > info - > link_status_changed ( v c- > peer ) ;
if ( n c- > peer & & n c- > peer - > info - > link_status_changed ) {
n c- > peer - > info - > link_status_changed ( n c- > peer ) ;
}
}
void net_cleanup ( void )
{
NetClientState * v c, * next_vc ;
NetClientState * n c, * next_vc ;
QTAILQ_FOREACH_SAFE ( v c, & net_clients , next , next_vc ) {
qemu_del_vlan_client ( v c) ;
QTAILQ_FOREACH_SAFE ( n c, & net_clients , next , next_vc ) {
qemu_del_vlan_client ( n c) ;
}
}
void net_check_clients ( void )
{
NetClientState * v c;
NetClientState * n c;
int i ;
/* Don't warn about the default network setup that you get if
@ -943,11 +943,11 @@ void net_check_clients(void)
net_hub_check_clients ( ) ;
QTAILQ_FOREACH ( v c, & net_clients , next ) {
if ( ! v c- > peer ) {
QTAILQ_FOREACH ( n c, & net_clients , next ) {
if ( ! n c- > peer ) {
fprintf ( stderr , " Warning: %s %s has no peer \n " ,
v c- > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC ? " nic " : " netdev " ,
vc - > name ) ;
n c- > info - > type = = NET_CLIENT_OPTIONS_KIND_NIC ?
" nic " : " netde v" , n c- > name ) ;
}
}