Ignore:
Timestamp:
Oct 10, 2020, 5:11:27 PM (4 years ago)
Author:
alain
Message:
  • Introduce the sys_socket.c file implementing all socket related syscalls.
  • Improve the non-standard sys_get_config() function.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/syscalls/sys_display.c

    r657 r664  
    3535#include <vfs.h>
    3636#include <mapper.h>
    37 
     37#include <ksocket.h>
    3838#include <syscalls.h>
    3939
     
    5757    else if( type == DISPLAY_BARRIER           ) return "BARRIER";
    5858    else if( type == DISPLAY_FAT               ) return "FAT";
     59    else if( type == DISPLAY_SOCKET            ) return "SOCKET";
    5960    else                                         return "undefined";
    6061}
     
    8182tm_start = hal_get_cycles();
    8283if( DEBUG_SYS_DISPLAY < tm_start )
    83 printk("\n[%s] thread[%x,%x] enter / type  %s / cycle = %d\n",
    84 __FUNCTION__, process->pid, this->trdid, display_type_str(type), (uint32_t)tm_start );
     84printk("\n[%s] thread[%x,%x] enter / type  %s / arg0 %x / arg1 %x / arg2 %x / cycle = %d\n",
     85__FUNCTION__, process->pid, this->trdid, display_type_str(type),
     86(uint32_t)arg0, (uint32_t)arg1, (uint32_t)arg2, (uint32_t)tm_start );
    8587#endif
    8688
     
    114116
    115117#if DEBUG_SYSCALLS_ERROR
    116 printk("\n[ERROR] in %s for STRING : string length %d too large\n",
     118printk("\n[ERROR] in %s STRING : string length %d too large\n",
    117119__FUNCTION__ , length );
    118120#endif
     
    143145
    144146#if DEBUG_SYSCALLS_ERROR
    145 printk("\n[ERROR] in %s for VMM : process %x in cluster %x not found\n",
     147printk("\n[ERROR] in %s VMM : process %x in cluster %x not found\n",
    146148__FUNCTION__ , pid , cxy );
    147149#endif
     
    156158
    157159#if DEBUG_SYSCALLS_ERROR
    158 printk("\n[ERROR] in %s for VMM : process %x in cluster %x not found\n",
     160printk("\n[ERROR] in %s VMM : process %x in cluster %x not found\n",
    159161__FUNCTION__ , pid , cxy );
    160162#endif
     
    179181
    180182#if DEBUG_SYSCALLS_ERROR
    181 printk("\n[ERROR] in %s for SCHED : illegal cxy argument %x\n",
     183printk("\n[ERROR] in %s SCHED : illegal cxy argument %x\n",
    182184__FUNCTION__ , cxy );
    183185#endif
     
    191193
    192194#if DEBUG_SYSCALLS_ERROR
    193 printk("\n[ERROR] in %s for SCHED : illegal lid argument %x\n",
     195printk("\n[ERROR] in %s SCHED : illegal lid argument %x\n",
    194196__FUNCTION__ , lid );
    195197#endif
     
    214216
    215217#if DEBUG_SYSCALLS_ERROR
    216 printk("\n[ERROR] in %s for CLUSTER_PROCESSES : illegal cxy argument %x\n",
     218printk("\n[ERROR] in %s CLUSTER_PROCESSES : illegal cxy argument %x\n",
    217219__FUNCTION__ , cxy );
    218220#endif
     
    249251
    250252#if DEBUG_SYSCALLS_ERROR
    251 printk("\n[ERROR] in %s for TXT_PROCESSES : illegal txt_id argument %d\n",
     253printk("\n[ERROR] in %s TXT_PROCESSES : illegal txt_id argument %d\n",
    252254__FUNCTION__ , txt_id );
    253255#endif
     
    280282
    281283#if DEBUG_SYSCALLS_ERROR
    282 printk("\n[ERROR] in %s for BUSYLOCKS : thread[%x,%x] not found\n",
     284printk("\n[ERROR] in %s BUSYLOCKS : thread[%x,%x] not found\n",
    283285__FUNCTION__ , pid, trdid );
    284286#endif
     
    313315
    314316#if DEBUG_SYSCALLS_ERROR
    315 printk("\n[ERROR] in %s for MAPPER : pathname too long\n",
     317printk("\n[ERROR] in %s MAPPER : pathname too long\n",
    316318 __FUNCTION__ );
    317319#endif
     
    325327
    326328#if DEBUG_SYSCALLS_ERROR
    327 printk("\n[ERROR] in %s for MAPPER : nbytes cannot be larger than 4096\n",
     329printk("\n[ERROR] in %s MAPPER : nbytes cannot be larger than 4096\n",
    328330 __FUNCTION__ );
    329331#endif
     
    386388
    387389#if DEBUG_SYSCALLS_ERROR
    388 printk("\n[ERROR] in %s for MAPPER : cannot get page %d\n",
     390printk("\n[ERROR] in %s MAPPER : cannot get page %d\n",
    389391__FUNCTION__ , page_id );
    390392#endif
     
    414416
    415417#if DEBUG_SYSCALLS_ERROR
    416 printk("\n[ERROR] in %s for BARRIER : process %x not found\n",
     418printk("\n[ERROR] in %s BARRIER : process %x not found\n",
    417419__FUNCTION__ , pid );
    418420#endif
     
    428430
    429431#if DEBUG_SYSCALLS_ERROR
    430 printk("\n[ERROR] in %s for BARRIER : no registered barrier in process %x\n",
     432printk("\n[ERROR] in %s BARRIER : no registered barrier in process %x\n",
    431433__FUNCTION__ , pid );
    432434#endif
     
    452454
    453455#if DEBUG_SYSCALLS_ERROR
    454 printk("\n[ERROR] in %s for FAT : nb_slots larger than 1024\n",
     456printk("\n[ERROR] in %s FAT : nb_slots larger than 1024\n",
    455457__FUNCTION__ );
    456458#endif
     
    467469
    468470#if DEBUG_SYSCALLS_ERROR
    469 printk("\n[ERROR] in %s for FAT : illegal cxy argument %x\n",
     471printk("\n[ERROR] in %s FAT : illegal cxy argument %x\n",
    470472__FUNCTION__ , cxy );
    471473#endif
     
    482484                fatfs_display_fat( min , slots );
    483485            }
     486
     487            break;
     488        }
     489        ////////////////////
     490        case DISPLAY_SOCKET:
     491        {
     492            pid_t   pid   = (pid_t)arg0;
     493            trdid_t fdid  = (trdid_t)arg1;
     494
     495            // get extended pointer on owner process descriptor
     496            xptr_t owner_xp = cluster_get_owner_process_from_pid( pid );
     497
     498            if( owner_xp == XPTR_NULL )
     499            {
     500
     501#if DEBUG_SYSCALLS_ERROR
     502printk("\n[ERROR] in %s SOCKET : pid %x not found\n", __FUNCTION__ , pid );
     503#endif
     504                this->errno = EINVAL;
     505                return -1;
     506            }
     507
     508            // get extended pointer on file descriptor
     509            xptr_t file_xp = process_fd_get_xptr_from_owner( owner_xp , fdid );
     510
     511            if( file_xp == XPTR_NULL )
     512            {
     513
     514#if DEBUG_SYSCALLS_ERROR
     515printk("\n[ERROR] in %s SOCKET : fdid %d not found\n", __FUNCTION__ , fdid );
     516#endif
     517                this->errno = EINVAL;
     518                return -1;
     519            }
     520
     521            // get local pointer and cluster for file
     522            vfs_file_t * file_ptr = GET_PTR( file_xp );
     523            cxy_t        file_cxy = GET_CXY( file_xp );
     524
     525            // get local pointer on socket descriptor
     526            socket_t * socket = hal_remote_lpt( XPTR( file_cxy , &file_ptr->socket ) );
     527
     528            // display socket descriptor on TXT0
     529            socket_display( XPTR( file_cxy , socket ), NULL );
    484530
    485531            break;
Note: See TracChangeset for help on using the changeset viewer.