\chapter{Analýza rizik}
Cílem této kapitoly je poskytnout bezpečnostní analýzu vybrané sběrnice ARINC 664. Bezpečnostní analýza vychází z požadavku zadavatele na vysokou bezpečnost použitých zařízení v letadle. Proto je nutné každé zařízení podrobit důkladnému bezpečnostnímu rozboru, a to na základě standardizovaných metod\cite{arp}.

Pro sběrnici ARINC 664 bude na základě použité topologie a definovaných možných chyb v systému (\zk{zkFHA}, \zkratkatext{zkFHA}, od zadavatele) navržena stromová struktura jednotlivých chyb a jejich příspěvků k pravděpodobnosti vzniku definované chyby (\zk{zkFTA}, \zkratkatext{zkFTA}).

Závěrečná část bude srovnávat analyzované chyby se simulovanou topologií sběrnice ARINC 664 pro potvrzení zde definovaných bezpečnostních rizik.
\section{Topologie analyzovaného systému}
Analyzovaná topologie vychází přímo ze standardu \cite{afdx} a je zobrazena na obr. \ref{fig:topologie_safety}. Systém obsahuje 2 AFDX přepínače (Switch A a Switch B), ke kterým jsou připojeny jednotlivé koncové uzly systému. Každý koncový uzel je tedy připojen k oběma přepínačům (jedním vedením). Takto je zajištěna nezávislost obou přenosových cest - přepínače i vedení jsou zdvojena. Celkový počet koncových uzlů je zadavatelem odhadován na maximálně 20.

Takováto topologie splňuje veškeré parametry definované v \cite{afdx}. Je zřejmé, že systém není dokonalý, protože při selhání jakékoliv jeho části dochází k vysokému zvýšení pravděpodobnosti chyby v přenosu. Tomuto faktu se ale nelze vyhnout s žádným reálným systémem. Bezpečnostní analýza s tímto faktem počítá a předpokládá, že ke vzniku jakékoliv chyby může dojít, ale takováto chyba je nezávislá na ostatních. Dalším z předpokladů je, že dvě různé na sobě nezávislé chyby se mohou vyskytnout pouze s velmi malou pravděpodobností. Proto musí být systém letadla schopen případné chyby odhalit a oznámit posádce nutnost údržbářského zásahu vedoucího k odstranění této závady a tím k obnovení celkové bezpečnosti letadla.

Koncový uzel, kde dochází ke zpracování přijímaných dat, je připojen k řídicí jednotce (\zk{zkDACU}, \zkratkatext{zkDACU}), která ovládá jednotlivé řídicí plochy. Proto je na něj z hlediska bezpečnosti kladen vysoký důraz a musí splňovat kritéria podložená následující bezpečnostní analýzou.

Analyzované vnitřní schéma koncového uzlu společně se základním náčrtem DACU je uvedeno na obr. \ref{fig:koncovy_uzel}, část B). DACU obsahuje dvě nezávislé jednotky, z nichž každá provádí stejné výpočty/operace, které se navzájem kontrolují. Každá jednotka obsahuje svou nezávislou AFDX vrstvu, pro zajištění vyšší bezpečnosti systému. Každá tato vrstva obsahuje nezávislou porovnávací jednotku, která srovnává data z obou částí a je schopna označit chybějící nebo špatná vstupní data.

\begin{figure}[htbp]
	\centering
  \includegraphics[width=15cm]{obrazky/topologie_safety.png}
  \caption{Analyzovaná topologie AFDX sítě.}
  \label{fig:topologie_safety}
\end{figure}

\begin{figure}[htbp]
	\centering
  \includegraphics[width=10cm]{obrazky/koncovy_uzel.png}
  \caption{Srovnání přístupu k návrhu topologie koncového uzlu. A) společná vsrtva AFDX; B) rozdělená vrstva AFDX}
  \label{fig:koncovy_uzel}
\end{figure}

\section{Pravděpodobnosti chyb v systému}
Pravděpodobnosti vzniku jednotlivých chyb systému letadla byly analyzovány na základě požadavků zadavatele (jsou odvozeny z FHA). Těmto jednotlivým chybám byl definován příspěvek sběrnice AFDX k jejich vzniku. Seznam těchto chyb je uveden v tab. \ref{tab:fha}. Dále byly vytvořeny FTA pro tyto chyby, v nichž jsou identifikovány jednotlivé základní možné příčiny jejich vzniku (\uv{basic event}). Poznámka v tabulce určuje bezpečnostní riziko pro posádku a cestující v letadle - I -- katastrofické selhání\footnote{catastrophic failure, viz \cite{arp}}, II -- závážné selhání\footnote{hazardous failure, viz \cite{arp}}. Méně závažné chyby zde nejsou analyzovány.

\subsection*{Nesprávná vstupní data v jedné řídicí cestě}
Analyzovány byly příspěvky sběrnice k následujícím chybám: FHA1A, FHA1B, FHA3, FHA6A, FHA6B, FHA10 (viz tab. \ref{tab:fha}).
Tato chyba znamená, že přenášená data byla mezi odesílatelem a příjemcem pozměněna, ale pouze v jednom přenosovém kanálu, a pro všechny DACU tomuto kanálu náležící. Může vzniknout, pokud: AFDX switch chybně přečte data z připojeného média, AFDX switch pozmění data (HW chyba) během zpracovávání rámce, AFDX chybně zapíše data na výstupní připojené médium, bitová chyba při přenosu rámce médiem, chybně zapsaná data koncovým uzlem a chybně přečtená data rámce koncovým uzlem.

Všechny chyby mají podobným efekt -- vznikne bitová chyba v přenášených datech (data jsou nesprávná a neměla by být použita při výpočtech) a zároveň vznikne takové CRC, že tato chyba není odhalena. Toto je možné pouze pokud zůstane CRC stejné, ale odpovídá i pozměněným datům nebo v CRC vznikne taková bitová chyba, že odpovídá pozměněným datům.

V první příloze, část 1, je uveden FTA pro takovýto typ chyby (viz FTA1A).

\subsection*{Neoznačená nesprávná vstupní data pro jedno DACU}
Analyzovány byly příspěvky sběrnice k následujícím chybám: FHA2B, FHA4B, FHA5B, FHA8B, FHA9, FHA11, FHA12 (viz tab. \ref{tab:fha}).
Tato chyba znamená, že DACU přijme data, která jsou nesprávná (došlo k jejich pozměnění) a také neoznačená (selhání porovnání dat z obou přenosových cest). 

To může nastav ve dvou případech: pokud nastane naprosto stejná bitová chyba v obou přenosových cestách (velmi malá pravděpodobnost, dále není analyzováno) nebo pokud jsou neoznačená nesprávná data pouze v jednom přenosovém kanálu. Z FTA stromu je vidět, že k takovémuto porušení dat dojde pouze pokud nastane chyba odpovídající například chybě FHA1A a zároveň dojde k chybnému zpracování přijatých rámců porovnávacím monitorem.

Ten může selhat ve dvou případech: neoznačí neshodné rámce z obou cest (HW chyba) nebo neoznačí ztracený rámec.

V první příloze, část 2, je uveden FTA pro takovýto typ chyby (viz FTA11).

\subsection*{Neoznačená nesprávná vstupní data pro obě DACU}
Analyzovány byly příspěvky sběrnice k následujícím chybám: FHA2A, FHA7A, FHA7B, FHA8A (viz tab. \ref{tab:fha}).
Tato chyba vznikne, pokud dojde k různým chybám typu FHA2B pro dvě různá DACU zároveň. Pravděpodobnost takovéto chyby je dána součinem pravděpodobností pro jednotlivé chyby. Proto je tento typ chyby považován za dostatečně málo pravděpodobný.

V první příloze, část 3, je uveden FTA pro takovýto typ chyby (viz FTA2A).

\subsection*{Neoznačená nesprávná vstupní data pro všechny tři DACU}
Analyzovány byly příspěvky sběrnice k následujícím chybám: FHA4A, FHA5A (viz tab. \ref{tab:fha}).
Protože pravděpodobnost vzniku chyby pro tři DACU je menší než pravděpodobnost vzniku chyby pro dvě DACU, je tento scénář považován za stejně pravděpodobný jako například vznik chyby FHA2A.

V první příloze, část 4, je uveden FTA pro takovýto typ chyby (viz FTA4A).

\subsection*{Neoznačená nesprávná vstupní data alespoň pro dvě DACU}
Analyzovány byly příspěvky sběrnice k následujícím chybám: FHA13 (viz tab. \ref{tab:fha}).
Protože pravděpodobnost vzniku chyby pro tři DACU je menší než pravděpodobnost vzniku chyby pro dvě DACU, je tento scénář považován za stejně pravděpodobný jako například vznik chyby FHA2A.

V první příloze, část 5, je uveden FTA pro takovýto typ chyby (viz FTA13).

\begin{center}
	\begin{longtable}{|p{2cm}|p{2cm}|p{4cm}|p{3cm}|p{1,5cm}|}
		\caption{Definice příspěvků chyb sběrnice k systémovým chybám}
		\label{tab:fha} \\
		
		\hline {\textbf{Letová funkcionalita}} & {\textbf{Číslo systémové FHA chyby}} & {\textbf{Chyba D-FBW systému}} & {\textbf{Příspěvek sběrnice k chybě}} & {\textbf{Pozn.}} \\ \hline 
\endfirsthead

\multicolumn{5}{c}%
{{\bfseries \tablename\ \thetable{} -- pokračování z předchozí strany}} \\

\hline {\textbf{Letová funkcionalita}} & {\textbf{Číslo systémové FHA chyby}} & {\textbf{Chyba D-FBW systému}} & {\textbf{Příspěvek sběrnice k chybě}} & {\textbf{Pozn.}} \\ \hline 
\endhead\hline

\multicolumn{5}{|r|}{{Pokračování na další straně}} \\ \hline
\endfoot

\hline \hline
\endlastfoot

				Ovládání klonění (křidélka a spoilery) &FHA 1A &Selhání všech DACU pro křidélka (vypnuté) &Nesprávná vstupní data v jedné řídicí cestě &I \\ \hline
				Ovládání klonění (křidélka a spoilery)	&FHA 1B	&Selhání 2 DACU pro řízení jednoho křidélka a selhání DACU pro řízení 3 párů spoilerů.	&Nesprávná vstupní data v jedné řídicí cestě	&I \\ \hline
				Ovládání klonění (křidélka)	&FHA 2A	&Nedetekovaný nesprávný řídicí pokyn z obou DACU současně pro jedno křidélko (obě DACU ovládají plochu).	&Neoznačená nesprávná vstupní data pro obě DACU.	&I \\ \hline
				Ovládání klonění (křidélka)	&FHA 2B	&Nesprávný řídicí pokyn z jednoho DACU pro jedno křidélko (druhé DACU toto křidélko neovládá - je odpojeno)	&Neoznačená nesprávná vstupní data pro jedno DACU.	&I \\ \hline
				Ovládání zatáčení (směrovka)	&FHA 3	&Selhání všech DACU pro směrovku (vypnuté)	&Nesprávná vstupní data v jedné řídicí cestě	&II \\ \hline
				Ovládání zatáčení (směrovka)	&FHA 4A	&Všechny aktivní DACU umožňují ovládáni směrovky bez limitace	&Neoznačená nesprávná vstupní data pro všechny tři DACU.	&I \\ \hline
				Ovládání zatáčení (směrovka)	&FHA 4B	&Jedno aktivní DACU umožňuje ovládání směrovky bez limitace (ostatní 2 jsou odpojené)	&Neoznačená nesprávná vstupní data pro jedno DACU.	&I \\ \hline
				Ovládání zatáčení (směrovka)	&FHA 5A	&Nedetekovaný nesprávný řídicí pokyn ze všech tří DACU současně pro směrovku.	&Neoznačená nesprávná vstupní data pro všechny tři DACU.	&I \\ \hline
				Ovládání zatáčení (směrovka)	&FHA 5B	&Nesprávný řídicí pokyn z jednoho DACU pro směrovku (zbylé dvě DACU směrovku neovládá - jsou odpojené)	&Neoznačená nesprávná vstupní data pro jedno DACU.	&I \\ \hline
				Ovládání klopení (výškovky a HS)	&FHA 6A	&Selhání všech DACU pro výškovky (vypnuté)	&Nesprávná vstupní data v jedné řídicí cestě	&I \\ \hline
				Ovládání klopení (výškovky a HS)	&FHA 6B	&Selhání 2 DACU pro řízení jedné výškovky a selhání DACU pro vyvažovací funkci.	&Nesprávná vstupní data v jedné řídicí cestě	&I \\ \hline
				Ovládání klopení (výškovky)	&FHA 7A	&Rozdílný řídicí pokyn pro levou a pravou výškovku plynoucí z chyby DACU	&Neoznačená nesprávná vstupní data pro dvě DACU.	&I \\ \hline
				Ovládání klopení (výškovky)	&FHA 7B	&Neoznámené rozdělení výškovek díky různým pokynům od pilota, nebo je jedna výškovka zaseknutá/nefunkční	&Neoznačená nesprávná vstupní data pro dvě DACU.	&I \\ \hline
				Ovládání klopení (výškovky)	&FHA 8A	&Nedetekovaný nesprávný řídicí pokyn z obou DACU současně pro jednu výškovku (obě DACU ovládají plochu).	&Neoznačená nesprávná vstupní data pro dvě DACU.	&I \\ \hline
				Ovládání klopení (výškovky)	&FHA 8B	&Nesprávný řídicí pokyn z jednoho DACU pro jednu výškovku (druhé DACU tuto výškovku neovládá - je odpojeno)	&Neoznačená nesprávná vstupní data pro jedno DACU.	&I \\ \hline
				Ovládání klopení (HS)	&FHA 9	&Trvalý nedetekovaný nesprávný řídicí pokyn z DACU řídicího HS	&Neoznačená nesprávná vstupní data pro jedno DACU.	&I \\ \hline
				Vzdušné brzdy (spoilery)	&FHA 10	&D-FBW systém nemůže řídit dostatečný počet spoilerových párů k zajištění funkce vzdušné brzdy kvůli selhání několika DACU	&Nesprávná vstupní data v jedné řídicí cestě	&II \\ \hline
				Spoilery	&FHA 11	&Nesprávný současný řídicí pokyn ze všech DACU řídicích spoilerové páry	&Neoznačená nesprávná vstupní data pro DACU řídicí spoilerové páry.	&I \\ \hline
				Asistence klonění (spoilery)	&FHA 12	&Nesprávný řídicí pokyn z DACU způsobí kmitání spoilerového páru	&Neoznačená nesprávná vstupní data pro jedno DACU.	&I \\ \hline
				Asistence klonění (spoilery)	&FHA 13	&Nesprávný řídicí pokyn z alespoň dvou DACU řídicích spoilerové páry	&Neoznačená nesprávná vstupní data alespoň pro dvě DACU.	&I \\ \hline

  	
	\end{longtable}
\end{center}

V tab. \ref{tab:basic_events} jsou uvedeny jednotlivé základní chyby (např. Chybně přeneseno CRC na médiu) s uvedenou předpokládanou hodnotou pravděpodobnosti jejich výskytu v systému. V tabulce je dále uveden systémový efekt takovéto chyby (např. Data označena jako nesouhlasná v obou linkách) a v kterém stromu \zk{zkFHA} se tato chyba vyskytuje. Pro příklad je uveden výpis základních chyb z FHA11. Pro ostatní chyby FHA je nutné vycházet z příslušných FTA stromů (viz první příloha).
\begin{center}
	\begin{longtable}{|p{3,5cm}|p{3,5cm}|p{3,5cm}|p{3cm}|}
		\caption{Pravděpodobnosti základních chyb systému a systémový efekt}
		\label{tab:basic_events} \\
		
		\hline {\textbf{Chyba}} & {\textbf{Předpokládaná pravděpodobnost}} & {\textbf{Systémový efekt}} & {\textbf{FHA}}\\ \hline 
\endfirsthead

\multicolumn{4}{c}%
{{\bfseries \tablename\ \thetable{} -- pokračování z předchozí strany}} \\

\hline {\textbf{Chyba}} & {\textbf{Předpokládaná pravděpodobnost}} & {\textbf{Systémový efekt}} & {\textbf{FHA}}\\ \hline 
\endhead\hline

\multicolumn{4}{|r|}{{Pokračování na další straně}} \\ \hline
\endfoot

\hline \hline
\endlastfoot

				Stejná bitová chyba v obou přenosových kanálech &10e$^{\textrm{-16}}$ &Neoznačená nesprávná vstupní data &FHA11 \\ \hline
				Chybně přečtená data (payload) u AFDX switche &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				CRC odpovídá chybným datům &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně přečteno CRC u AFDX switche &10e$^{\textrm{-16}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				AFDX switch poškodí data při zpracování rámce &10e$^{\textrm{-5}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně zapsaná data (payload) u AFDX switche &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně přenesená data (payload) &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně zapsáno CRC u AFDX switche &10e$^{\textrm{-16}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně přeneseno CRC na médiu &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně přečtená data (payload) u koncového uzlu &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline			
				Chybně přečteno CRC koncovým uzlem &10e$^{\textrm{-16}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně zapsaná data (payload) koncovým uzlem &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně zapsáno CRC koncovým uzlem na médium &10e$^{\textrm{-16}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Monitor neoznačí chybějící rámec &10e$^{\textrm{-5}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Rámec má nesprávnou velikost &10e$^{\textrm{-12}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Rámec nemá správný identifikátor VL &10e$^{\textrm{-14}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chyba při přenosu &10e$^{\textrm{-9}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Chybně zapsáno CRC u AFDX switche &10e$^{\textrm{-16}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline
				Monitor neoznačí nesouhlasné rámce &10e$^{\textrm{-5}}$ &Data označena jako nesouhlasná v obou linkách &FHA11 \\ \hline

  	
	\end{longtable}
\end{center}

Výskyt bitové chyby na médiu byl uvažován $\leq{10^{-9}}$. Tento předpoklad vychází ze závěrů \cite{ber}.

Pravděpodobnost, že CRC bude odpovídat chybným datům je spočítána z předpokladu, že počet všech kombinací CRC je konečný. Pro 32 bitové CRC je počet kombinací $4,295\cdot{10^{9}}$. Pravděpodobnost shody CRC je pak dána inverzí této hodnoty -- $2,3283\cdot{10^{-10}}$.

Pravděpodobnosti chyb při čtení a zápisu dat jednotlivými komponenty  byly uvažovány $\leq{10^{-16}}$. Tento předpoklad vychází z porovnání reálných síťových prvků a jejich vlastností\footnote{například zde: \url{http://www.cisco.com/en/US/products/hw/modules/ps2710/products_data_sheet09186a008019ad1a.html}}. Zde záleží na skutečné implementaci hardwarových součástí.

Pokud se základní chyba vyskytne samostatně, nemusí naznačená systémová chyba nastat, protože některé základní chyby musí nastat současně (tato logika je opět naznačena ve stromech FTA, viz první příloha).
\section{Simulace selhání systému}
V této části jsou ověřeny předpokládané dopady jednotlivých základních chyb na systém sběrnice \zk{zkAFDX} pomocí simulace těchto chyb.

K tomu, abychom mohli tyto základní chyby pozorovat ve výsledcích simulace z kap. \ref{chap:simulace}, musí se stávající model upravit. Tato úprava spočívá v doplnění o bloky, které způsobují různé (většinou náhodné) chyby uvnitř přenášených \zk{zkAFDX} rámců. Jednotlivé základní chyby byly implementovány dle tab. \ref{tab:basic_events}, ve které jsou obsaženy chyby objevující se ve všech FHA. Pro přehlednost nebyly implementovány všechny chyby, například chyby \uv{Chyba při přenosu}, \uv{Rámec nemá správný identifikátor VL} a \uv{Rámec má nesprávnou velikost} mají stejný dopad na systém (ztráta \zk{zkAFDX} rámce), a proto jsou v modelu zastoupeny jen jedním blokem.

Dále nebyla implementována chyba \uv{CRC odpovídá chybným datům}. Tato chyba nastane, pokud dojde k porušení (chybě) v přenášených datech (payload), ale CRC připojené k \zk{zkAFDX} rámci odpovídá i těmto chybným datům. Jelikož tento případ nastane pouze pro specifickou chybu v datech, je pravděpodobnost takovéto chyby velmi malá a navíc i její implementace by byla značně náročná (například ve srovnání s prostým výpočtem CRC). Z těchto důvodů nebyla tato chyba v simulaci zahrnuta.

Simulace umožňuje výskyt pouze jedné základní chyby v jednom okamžiku během běhu simulace. Toto omezení vychází z předpokladu, že základní chyby jsou na sobě nezávislé a proto je zkoumán systémový dopad pouze jedné chyby v daném okamžiku. Během běhu simulace lze mezi jednotlivými základními chybami přepínat pomocí grafického rozhraní. Zde může uživatel nastavit požadovanou chybu, nebo také veškeré chyby odstranit.

Přepínání chyb je implementováno jako funkce buttons(). Tato funkce je bez vstupních parametrů a je spuštěna při otevření modelu simulace, což způsobí zobrazení grafického prvku s tlačítky.

Grafické rozhraní je navrženo jako soubor přepínatelných tlačítek, kdy zapnutí jednoho způsobí vypnutí předešlého\footnote{takzvaný \uv{radio button}}. Každé tlačítko má přiřazenou svoji unikátní hodnotu, dle které je následně umožněno působení základní chyby spojené s tímto tlačítkem. Při přepnutí některého z tlačítek se spustí obslužná funkce, která způsobí změnu globální proměnné (tato je použita jako vstup do jednotlivých bloků základních chyb, které jsou jí řízené). Globální proměnná je použita výstupní hodnota bloku Simulink/Sources/Constant. Obslužná funkce tuto hodnotu (respektive řetězec znaků jména globální proměnné) nastaví nejprve na řetězec \uv{0} a poté na \uv{TL\_SEL}. Toto řešení způsobí změnu v parametru výstupního bloku, avšak tato změna se projeví během simulace pouze pokud dojde k otevření a zavření nabídky parametrů (Block parameters) tohoto bloku. Obslužná funkce automaticky vyvolá otevření všech těchto nabídek ve všech blocích způsobujících základní chyby. Proto také dojde při přepnutí některého z tlačítek k pozastavení simulace, otevření nabídek a jejich následnému uzavření. Po uzavření poslední nabídky simulace automaticky pokračuje.

\begin{figure}[htbp]
	\centering
  \includegraphics[width=15cm]{obrazky/error_block.png}
  \caption{Příklad bloku způsobujícího základní chybu.}
  \label{fig:error_block}
\end{figure}

Na obr. \ref{fig:error_block} je zobrazen příklad bloku způsobujícího základní chybu -- konkrétně chybu v přenášených datech. Tento blok je umístěn na médiu mezi koncovým systémem a \zk{zkAFDX} přepínačem a simuluje náhodnou bitovou chybu v přenášených datech.

Nejprve jsou z příchozí entity zkopírovány všechny atributy, které jsou následně zpracovány ve vnitřním bloku err\_gen. Ten obsahuje zapouzdřenou Matlab funkci\footnote{Embedded Matlab Function}.

Kód této funkce je následující:
\begin{verbatim}
function y = fcn(u, tlacitko)
temp = uint8(u);
pocetBytu = size(temp,1);
jedna = ones(1,1,'uint32');
if bitand(uint32(tlacitko),bitshift(jedna,6)) > 0
    y = temp(15:15+pocetBytu-20);
    zmena = uint8(round(rand(1,1)*255));
    y(uint8(ceil(rand(1,1) * size(y,1)))) = zmena;
else
    y = temp(15:15+pocetBytu-20);
end

end
\end{verbatim}

Funkce nejprve otestuje, zda je  hodnota stisknutého tlačítka rovna číslu přiřazenému tomuto chybovému bloku (zde testuje hodnotu 64\footnote{hodnoty tlačítek mají podobu 2$^{\textrm{k}}$, pro možné budoucí rozšíření, kde bude umožněno více chyb zároveň}). Pokud je podmínka splněna, je vygenerováno náhodné \footnote{pseudonáhodné, Matlab využívá generátor pseudonáhodných čísel, ovšem pro tuto simulaci je dostatečný}číslo. Tímto je nahrazen jeden náhodný byte v přenášené zprávě (ale pouze na pozici, kde leží užitečná data -- payload).

Bloky generující základní chyby vnáší do přenosu určité zpoždění, což by v koncovém systému způsobilo nesouběžnost jednotlivých toků dat (jak z jednotlivých \zk{zkVL}, tak i v oddělených cestách). Proto jsou tyto chybové bloky umístěny symetricky v celém modelu, avšak aktivovány jsou pouze některé. Takto je dosaženo synchronizace jednotlivých příchozích rámců a tím i zjednodušení řídicí logiky.

Rozmístění jednotlivých chybových bloků je uvedeno v druhé příloze.

\section{Vyhodnocení bezpečnosti sběrnice}
V simulaci bylo vyzkoušeno působení všech základních chyb z tab. \ref{tab:basic_events}. Pokud tyto chyby působily samostatně, pak došlo k naznačenému systémovému efektu dle analýzy, kromě jednoho případu.

Při analýze základní chyby -- AFDX switch poškodí data při zpracování rámce bylo nesprávně uvažováno i následné přepočítání CRC na výstupu přepínače. Běžné ethernetové přepínače provádí přepočítání CRC, protože došlo minimálně ke změně zdrojové a cílové MAC adresy při zpracování rámce přepínačem. Naopak u \zk{zkAFDX} přepínače zůstávají MAC adresy stejné během celé cesty rámce, a proto se CRC nepřepočítává. Proto také při vzniku uvedené základní chyby dojde k zahození příslušného rámce v koncovém systému (nesouhlasí CRC).

Oproti standardní sběrnici \zk{zkAFDX} byl do simulace přidán porovnávací monitor. Tento významně přispívá k zvýšení schopnosti sběrnice detekovat rozdíly v přijatých rámcích. V reálném systému by však jeho implementace byla složitější, protože je nutné počítat s odlišnou dobou příjmu rámců z obou sítí a ztracenými rámci. Tento nedostatek by se dal překonat využitím vyrovnávací paměti, která by rámce jednotlivých sítí ukládala, dokud nedojde k příjmu rámce z druhé sítě. Toto by však znamenalo zvýšení zpoždění celého datového provozu a složitější uspořádání komunikace mezi jednotlivými porovnávacími uzly obou sítí \zk{zkAFDX}.
%