- Today
- Total
목록프로그래밍 (Programming) (71)
Byeo
P4 tutorial을 따라해보기 위해서 환경을 구성합니다. P4 tutorial GitHub repository: https://github.com/p4lang/tutorials/ GitHub - p4lang/tutorials: P4 language tutorialsP4 language tutorials. Contribute to p4lang/tutorials development by creating an account on GitHub.github.com P4 tutorial에는 P4 language를 사용하여 Basic forwarding / tunneling switch부터 calculator, LB(!!), stateful 까지 여러 주제들을 구현하는 과제를 제공합니다. 단, P4를 사용할 수..
우리는 앞선 포스트에서 3-way handshake의 1st packet을 서버가 수신한다면 어떤 코드를 거치는지 확인했습니다: https://byeo.tistory.com/entry/Listen-socket%EC%9D%98-TCP-SYN-%EC%B2%98%EB%A6%AC Listen socket의 TCP SYN 처리 1accept system call은 established된 connection에 대해서 fd를 할당해 userspace에게 제공합니다. 그러면 3-way handshake의 TCP_SYN은 누가 처리할까요? 한 번 그 과정을 알아봅니다. 단, tcp code만 살펴볼 예정이고,byeo.tistory.com 1st handshake: 서버는 SYN packet을 수신하면 tcp의 globa..
지금까지 tcp_conn_request() 함수의 6867줄까지 확인을 했습니다. 남은 6869줄부터 어떤 기능이 있을지 확인해봅니다. 현재까지의 흐름도입니다: 5. tcp_conn_request5-7. timestamp// net/ipv4/tcp_input.c/tcp_conn_request() :6869 if (tmp_opt.tstamp_ok) tcp_rsk(req)->ts_off = af_ops->init_ts_off(net, skb); af_ops는 tcp_request_sock_ipv4이고, init_ts_off 함수는 tcp_v4_init_ts_off입니다. // net/ipv4/tcp_ipv4.c/tcp_v4_init_ts_off() :102static u32 tcp_v4_init_ts..
accept system call은 established된 connection에 대해서 fd를 할당해 userspace에게 제공합니다. 그러면 3-way handshake의 TCP_SYN은 누가 처리할까요? 한 번 그 과정을 알아봅니다. 단, tcp code만 살펴볼 예정이고, device driver와 ip layer는 스킵합니다. 나중에 read system call에서 깊이 다루게 될 것 같습니다. ★ 이 로직은 application에 의해서 trigger되는 로직이 아닙니다! NIC이 packet을 수신하여 interrupt가 발생했고, device driver가 이를 처리하기 위해 trigger되는 로직(으로 예상을 하고있고, 나중에 read에서 확인할 예정)입니다! 1. tcp_v4_rcvtc..
kernel function의 흐름이 모호할 때, ftrace가 도움을 줄 수 있습니다. ftrace 사용법을 정리해봅니다. kernel source code를 호스트에서 갖고 있고, 이를 qemu로 부팅합니다. linux 5.15입니다. 1. kernel configurationkernel configuration에서 FTRACE 관련 항목들의 설정을 확인합니다. CONFIG_FTRACE=y# CONFIG_BOOTTIME_TRACING is not setCONFIG_FUNCTION_TRACER=y available filter functions을 통해서 원하는 function만 tracing하도록 설정할 수 있습니다. 다른 설정들도 확인해서 필요한 값들도 있는지 확인합니다. (FTRACE 혹은 TRAC..
본 포스트는 sigcomm '21의 Revisiting the Open vSwitch Dataplane Ten Years Later를 요약하였습니다. 이전 포스트: https://byeo.tistory.com/entry/Revisiting-the-Open-vSwitch-Dataplane-Ten-Years-Later-2 Revisiting the Open vSwitch Dataplane Ten Years Later 2본 포스트는 sigcomm '21의 Revisiting the Open vSwitch Dataplane Ten Years Later를 요약하였습니다. 이전 포스트:https://byeo.tistory.com/entry/Revisiting-the-Open-vSwitch-Dataplane-Ten-..
이전 포스트: https://byeo.tistory.com/entry/accept-system-call-2-inetaccept accept system call 2 (inet_csk_accept)이전 포스트: https://byeo.tistory.com/entry/accept-system-call-1-sysaccept4 accept system call 1 (__sys_accept4)accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-byeo.tistory.com 7. inet_acceptinet_accept에서 호출했던 sk1->sk_prot->accept 함수는 inet_csk_accept ..
개요Blocking I/O의 동작 방법을 공부해 봅니다. (LDD (https://www.makelinux.net/ldd3/) 3판 section 6.2 요약) sys_accept을 공부하다가 blocking I/O에 대해서는 따로 간단히 정리를 해보면 좋겠다 싶어서 작성하게 되었습니다. Blocking I/O 하드웨어 장비는 언제나 작업을 처리할 수 있는 것은 아니다. 예를 들어, NIC을 통해서 data를 내보내고 싶은데 (send, TX), 이미 수많은 작업들이 쌓여있어서 하드웨어가 이를 수용하지 못할 수 있다. 반대로, application이 무언가 data를 받기를 기대하는데 (recv, RX) 실제로는 NIC에 들어온 data가 없을 수도 있다. 하지만 우리가 작성하는 프로그램은 하드웨어 상..
이전 포스트: https://byeo.tistory.com/entry/accept-system-call-1-sysaccept4 accept system call 1 (__sys_accept4)accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-system-call-Intro accept system call 0 - Intro일반적인 BSD Socket API는 server가 socket을 생성하고 bindbyeo.tistory.com sock->ops->accept 함수는 inet_accept입니다. 5. inet_accept// net/ipv4/af_inet.c/inet_accept() :..
accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-system-call-Intro accept system call 0 - Intro일반적인 BSD Socket API는 server가 socket을 생성하고 bind 하고 listen 하면, 그다음은 accept을 수행합니다. 이 accept은 client가 연결 요청을 시도 함으로 인해 listen queue에 차있는 established packet을 꺼내온byeo.tistory.com 언제나 그렇듯, __sys_accept에서 시작합니다. 단, 함수 명의 끝에 4가 붙어있습니다.0. Parameteraccpet의 parameter는 조금 특..